SQL SERVER中的表,以日期为条件查询,速度特别慢

longcry 2020-09-07 11:29:30
下面的问题请高手帮忙分析下可能是什么原因,或有遇到过的帮忙回答下:
SQL SERVER中的表,表中每月有600万条左右的记录,从2019年1月1日开始的。
最近感觉查询速度比较慢,故做了如下测试:
用SQL:select top 1000 * from 表名,速度很快;
用SQL:select top 1000 * from 表名 where 文本字段 like 'B%',速度很快;
用SQL:select top 1000 * from 表名 where 日期>'2019-1-1',速度很快;
这个日期条件一直测到'2019-3-1'都很快,然后从'2019-4-1'开始,速度奇慢:
'2019-4-1' ,耗时34秒;
'2019-5-1' ,耗时46秒;
'2019-6-1' ,耗时45秒;
'2019-7-1' ,耗时45秒;
'2019-8-1' ,耗时45秒;
最神奇的是,到了'2020-8-1' ,耗时竟然达到了5分钟!!
日期字段有一个非聚集的索引,我以为索引出了什么问题,所以删了索引重建,结果依旧。
扫描了一下日期字段的索引碎片,没发现什么问题:
已执行 LEAF 级别的扫描。
- 扫描页数................................: 198918
- 扫描区数..............................: 24865
- 区切换次数..............................: 24864
- 每个区的平均页数........................: 8.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [24865:24865]
- 逻辑扫描碎片 ..................: 0.00%
- 区扫描碎片 ..................: 0.14%
- 每页的平均可用字节数.....................: 11.0
- 平均页密度(满).....................: 99.86%
...全文
1923 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
longcry 2020-09-17
  • 打赏
  • 举报
回复
挺好用!谢谢~
sxq129601 2020-09-11
  • 打赏
  • 举报
回复
用分析函数row_number改写top,你可以尝试下看看
xiaoxiangqing 2020-09-10
  • 打赏
  • 举报
回复
看一下执行计划
longcry 2020-09-10
  • 打赏
  • 举报
回复
引用 3 楼 sxq129601 的回复:
TOP一直有这个数据分布的问题,你换个row_number写法就解决了

请问你说的“换个row_number”写法就解决了,是什么意思?
sxq129601 2020-09-09
  • 打赏
  • 举报
回复
TOP一直有这个数据分布的问题,你换个row_number写法就解决了
longcry 2020-09-08
  • 打赏
  • 举报
回复
引用 1 楼 吉普赛的歌 的回复:
select top 1000 * 
from 表名 
where 日期>'2019-4-1' 
ORDER BY 日期 ASC
加上排序了再试下呢? 如果还慢, 看一下执行计划。把执行计划的截图贴出来。
加了排序一样,不过我换了个思路,把日期字段的索引设为聚集类型,速度一下快了哈。谢谢!
吉普赛的歌 2020-09-07
  • 打赏
  • 举报
回复
select top 1000 * 
from 表名 
where 日期>'2019-4-1' 
ORDER BY 日期 ASC
加上排序了再试下呢? 如果还慢, 看一下执行计划。把执行计划的截图贴出来。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧