我從SQL Server(2005)得到一個奇怪的執行計劃行爲。sql服務器:估計的行數是關閉的
表名:LOG
......包含約1000行
- ID INT
- 名稱VARCHAR(50)
查詢:
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) as Row,
ID, Name
FROM Log) AS LogWithRowNumbers
WHERE Row >= 1
AND Row <= 2
它估計數量行數返回爲9(雖然它明顯是2或更少)。
此外,在去除 「和Row < = 2」 將增加約* 5.增加執行時間( 「和Row < = 2」 和 「和行< = 9999999999999」 的行爲相同)
我已經更新統計數據但是,這種行爲仍然很奇怪。添加行< 99999999999將使查詢運行速度更快?爲什麼?
來吧夥計們,這是很容易可再現的。那些DBA天才在你需要他們的時候在哪裏? – Faruz 2010-01-05 12:25:15
@Faruz:我不是DBA。但是,如果沒有任何AND/OR(即ROW = 1),只有一個標準,查詢的執行速度會更快。當'ROW = 1或ROW = 2'時它如何執行,而不是使用'> ='和'<='。它是否在內部爲「Log」表創建索引? – shahkalpesh 2010-01-05 12:40:15
行= 1或行= 2估計58個返回的行... 它不創建內部索引但使用PK索引(ID)。 – Faruz 2010-01-06 05:47:19