2009-08-21 29 views

回答

3

構建索引需要的時間比僅執行表掃描要花費的時間更長。因此,如果您的單個查詢 - 只運行一次 - 只是表掃描,則添加索引將會變慢。

但是,如果您的單個查詢不只是表掃描,則添加索引可能會更快。例如,如果沒有索引,數據庫可能會執行多次表掃描的連接,每個連接的行一次。那麼索引可能會更快。

我會說要對它進行基準測試,但對於一次性查詢而言,這聽起來很愚蠢,您只會運行一次。

+0

由於沒有INDEX,SELECT將執行表掃描,使用新的INDEX將一次將數據庫索引保存爲較慢。 – Galaxy 2009-08-21 06:26:38

+1

表掃描通常是O(n);索引通常是樹,因此構建索引可能不會比O(n)+ O(n * log(n))[n =行數]更快。 – derobert 2009-08-21 06:45:26

0

如果你考慮設置和索引一個只有兩個可能值的列,那麼這是不值得的,因爲索引幾乎沒有什麼改進。索引對於具有高度唯一性並經常查詢特定值或範圍的列很有用。在其他硬指標使插入和更新慢,所以在這種情況下,你應該跳過它。

+1

對於只有兩個值的列,索引可能值得。例如,也許你有一個包含大量行的表,並且布爾標誌「這是否需要處理?」。假設大多數事情不需要處理,那麼索引可能會大大加快「查找需要處理的東西」的查詢。一般來說,指數很好地發現了罕見的價值,無論該集合的整體基數如何。 (非常高的基數是一種特殊情況,其中* all *值很少) – derobert 2009-08-21 06:28:05

+0

所以如果我想選擇一個列。多次(約100 k)兩種可能性,我應該建立一個指數? – Galaxy 2009-08-21 06:28:58

+1

......罕見的定義爲小於1-10%,這取決於許多因素,例如隨機訪問表的花費與順序訪問的花費有多大。 – derobert 2009-08-21 06:29:57

相關問題