我有一个简单的select语句需要很长时间才能运行,但在同一个表上运行count(*)相同的WHERE子句在不到一秒的时间内返回。简单的选择查询运行速度非常慢,但在运行速度非常快的同一个表上选择count(*)
这个查询了很长一段时间运行(1小时+):
SELECT col1
, col2
, col3
FROM Table
WHERE RowInsertDate >= @SomeStartDate
AND RowInsertDate < @SomeEndDate
但此查询回来在不到一秒钟:
SELECT count(*)
FROM Table
WHERE RowInsertDate >= @SomeStartDate
AND RowInsertDate < @SomeEndDate
表拥有34万行,具有用于主键的ID列和地理区域(北,南,东,西)列。 “RowInsertDate”列是该行插入到表中的日期。上述查询的预期结果分别为“无行”和“0”。
此表的聚簇索引是(ID,geoRegion)ASC。此表在RowInsertDate ASC上也具有非聚集索引。
我不确定该从哪里出发。有没有人遇到过这个?
可能是一个容量的事情。返回多少行? – Paparazzi
这是一个执行计划可以帮助我们的人。同样,任何人都无法将选择col1,col2与您正在注意的索引关联起来,因为我们不知道索引是否包含或不包含哪些列,所以我们不知道这是否正确或不正确。 – Matt
这两个查询都是不同的,它会导致不同的执行计划。您可以提供执行计划 – TheGameiswar