SQL SERVER中的表,以日期为条件查询,速度特别慢
下面的问题请高手帮忙分析下可能是什么原因,或有遇到过的帮忙回答下:
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%