我有一個簡單的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