2011-04-22 83 views
1

一個特定的表我有一個整數「請將isDeleted」字段缺省值爲0
基本上此字段標誌作爲開始刪除或不連續。現在,在查詢時,我將根據是否設置此標誌指定獲取記錄。我應該使用索引在這些類型的屬性的

設置此屬性的索引值得嗎?

+0

良好的指數通常必須非常**選擇性**,例如,在給定的一組數據中,提取2-5%的數據行。如果你的'IsDeleted'標誌符合那個標準 - 那麼是的,你可以索引它並看到好處。如果你有20%,30%,50%的刪除行,那麼很可能索引編制根本沒有任何幫助...... – 2011-04-22 11:26:52

回答

0

如果刪除的記錄比現場(或反之亦然)多得多,那麼查詢最少使用的類型將受益於索引。

說,如果記錄1%被刪除,您要查詢

SELECT * 
FROM records 
WHERE isDeleted = 1 

,優化器會選擇索引,而該查詢:

SELECT * 
FROM records 
WHERE isDeleted = 0 

將使用全表掃描。

如果沒有刪除的未保留記錄的數量低於臨界點(這取決於記錄大小和其他事項,但作爲經驗法則可以被認爲是10%),那麼索引可能永遠不會被使用。

0

如果你正在使用MySQL,你應該使用BIT datatype這種操作有關布爾檢查,而不是整數。 (見http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html)。

True and False分別對應於1和0。

對於那些您指定值爲1的查詢,列上的索引可能值得,對於0,不。細節here

相關問題