1. SELECT TOP 1000 a,b,c,d FROM tb WITH (NOLOCK) WHERE a=1
2. SELECT TOP 1000 a,b,c,d FROM tb WITH (NOLOCK) WHERE a=1 and b=2 and c=3
数据量:10亿条记录
分区列:a (tiyint)
b和c都为bigint
CPU和IO都没有问题
问题:
第一条SQL执行没有问题
第二条SQL出现超时,执行大于150s都没有完成
执行计划任务(3千万数据)查看过,没有问题.
请问各位码友,这是何缘故,还望指点一番
是MS SQL 统计信息导致会扫描全表,而出现SQL超时,谢谢各位
没有索引,超时
And一下判断要多出一倍的运算.只有一个a=1的时候,他可以先排序再获取会快很多.
多了2个and Sql优化不了,造成性能低下的把
猜的```
是否和存储硬盘满了有关系
建立包含a, b, c三个字段的复合索引
数据量太大了,没办法再建索引,而且建复合所以也是很占空间,之前都OK,这会不会和MDF文件存放盘快满了有关系呢?
@抽烟的烦恼: 怎么会没办法建索引?
再下一条语句:SELECT TOP 1000 a,b,c,d FROM tb WITH (NOLOCK) WHERE b=2 再看看结果,感觉是和你的数据类型有关...
一样都是超时,只有用分区列来判断次才可以行,应该 MS SQL 统计信息重建,导致要全表扫表
这个问题,也不敢直接下定论,毕竟数据量有这么大,查询的IO开销肯定也很高,这么大数据量稍微一个小的条件都可能导致超时。只能是 你通过查看执行计划 IO 开销 sql 执行时间 来排查问题,