2017-03-24 38 views
-3

我們嘗試在where子句中選擇2列的數據,問題是1列在整個表中只有1個值,第二列在整個500 000行的表中只有1,3和5個值。索引列有重複值的列有什麼好處嗎?

查詢需要更多時間,所以如果我在這兩列上索引,它會提供更好的性能嗎?我確實有一些想法,那就是低基數的列將會有不好的表現。但是有沒有機會獲得更好的表現?

+1

「1列只有一個值」。我不明白。爲什麼在桌子上?它爲什麼在WHERE子句中?示例數據將確實有助於傳達您的數據看起來像什麼。 「 –

+1

」肯定表現不好「 - 爲什麼?您應該將索引添加到出現在WHERE子句中的列。這些列是否出現在任何?如果沒有,添加索引不會有所幫助。 – duffymo

+0

一列在整個表格中的值爲「taxcal」,另一列的值爲「1」,「3」和「5」 – user7761587

回答

0

如果一列中只有一個值,那麼索引它不會有太大的幫助。如果您只是選擇該值,則掃描索引可能比掃描整個錶快一點。但是這個查詢看起來不太有用。

如果一列只有三個值,那麼它的選擇性可能很差。也就是說,每個值大約有三分之一的記錄。一般來說,如果三分之一的記錄具有給定的值,那麼選擇其中一個值的查詢將必須讀取所有的數據頁面。

因此,索引不會非常有用。

有兩種情況,索引可能有用。第一個是如果其中一個價值比其他價值更稀有。因此,如果僅在1000條記錄中有1條出現「1」,那麼當您查找「1」值時,索引應該使查詢更快。

另一種情況是當列是聚簇索引中的第一列時。這將減少需要讀取的頁面數量。但是,列值(與標識列相對)上的聚簇索引具有其他開銷,特別是在插入或更新值時。

相關問題