2009-11-18 53 views
2

我們有一個SQL查詢如下全表掃描,甚至發生?

select * from Table where date < '20091010' 

然而,當我們看查詢計劃,我們看到

查詢類型是SELECT。

FROM TABLE 
     Worktable1. 
    Nested iteration. 
    Table Scan. 
    Forward scan. 
    Positioning at start of table. 
    Using I/O Size 32 Kbytes for data pages. 
    With MRU Buffer Replacement Strategy for data pages. 

這看起來似乎暗示全表掃描已完成。爲什麼索引不被使用?

回答

3

如果大多數日期通過應用< '20091010'那麼指數很可能有利於表掃描的忽視找到。那張表中的日期分佈是什麼?什麼是基數?如果您只使用索引select date而不是select *?

1

除非索引覆蓋*,否則優化程序會意識到表掃描可能比索引查找/掃描和書籤查找更有效。日期範圍的預期選擇性是什麼?您是否定義了主鍵?