永发信息网

sql 优化,高手的进

答案:4  悬赏:70  手机版
解决时间 2021-04-20 00:48
  • 提问者网友:温旧梦泪无声
  • 2021-04-19 16:58

ELECT top 6 hotel_Around,city,city_name,around_id,COUNT(*) AS Expr1 FROM Searcharound_v_top WHERe (DATEDIFF(dd, inputdate, GETDATE()) < 8) AND (DATEDIFF(dd, inputdate, GETDATE())> 0) GROUP BY hotel_Around,city,city_name,around_id ORDER BY COUNT(*) DESC

视图:Searcharound_v_top

id city_name Around inputdate around_id city

100000 866 东钱湖 2009-7-22 11:00:00 107062 宁波
100005 746 滨江公园 2009-7-22 11:02:00 106030 惠州
100015 755 景点景观 2009-7-22 11:04:00 139104 深圳
100019 744 广东药学院附属第一医院 2009-7-22 11:04:00 113039 广州

求一周内,查询最多的关键字~~优化求解!!!!

一周查询数量50000左右,要用group by 来匹配是相当慢的~

能用什么办法求到答案呢?

最佳答案
  • 五星知识达人网友:你哪知我潦倒为你
  • 2021-04-19 18:08
把这个查询写成存储过程的形式,调用存储过程比执行SQl快很多了
全部回答
  • 1楼网友:忘川信使
  • 2021-04-19 21:11

不要用datediff函数,会对每一行的日期进行函数运算再去比较,在数据多的情况下会很慢。

用 inputdate between dateadd(dd,-7,getdate()) and dateadd(dd,-1,getdate()) 相信对你的速度会有提高

  • 2楼网友:洎扰庸人
  • 2021-04-19 19:37

select * from Searcharound_v_top where Around in

(select top 6 Around from Searcharound_v_top

where datediff(ww, inputdate, getdate())=0

order by count(Around) desc)

先查出一周内的最多的6个关键字,在查出相关信息

不知道是否符合你的要求

  • 3楼网友:野味小生
  • 2021-04-19 19:18

SELECt top 6 hotel_Around,city,city_name,around_id,COUNT(*) AS Expr1 FROM Searcharound_v_top WHERe convert(varchar(10),inputdate,21) between convert(varchar(10),getdate(),21) and convert(varchar(10),dateadd(dd,-7,getdate()),21) GROUP BY hotel_Around,city,city_name,around_id ORDER BY COUNT(*) DESC

呵呵 思路一样、写法不一样而已

除了先把一个星期的数据过滤、再统计外、想不到其它什么好方法了

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯