SELECT a,b,c FROM t WHERE status!="deleted"
可能的值是「積極的」,「刪除」,「待定」等應該在SQL表中刪除狀態列<code>status</code>索引
應該status
索引?請解釋爲什麼你覺得它應該或不應該。
編輯。 t將持有一堆記錄。它們會定期被刪除。而不是刪除它們,我只是添加一個名爲「狀態」的列表示它們是否被刪除。
SELECT a,b,c FROM t WHERE status!="deleted"
可能的值是「積極的」,「刪除」,「待定」等應該在SQL表中刪除狀態列<code>status</code>索引
應該status
索引?請解釋爲什麼你覺得它應該或不應該。
編輯。 t將持有一堆記錄。它們會定期被刪除。而不是刪除它們,我只是添加一個名爲「狀態」的列表示它們是否被刪除。
對於查詢與
WHERE status!="deleted"
謂詞B樹(和Hash)基於索引將是無用的。僅僅因爲他們不會優化!=
運營商。
所以具有覆蓋status
作爲其最左邊的部分只會是有用的,如果一個索引:
=
比較(或IN (...)
)PS:如果以上兩項是實際情況 - 值得研究基於Hash
的實際索引。
+1教我一些非常有用的東西。我會刪除我的答案;-) –
哎呀!這是一個大問題。我不明白B-Tree,但是,我承認你是這樣做的。所以,如果行數很高,而且我只希望顯示沒有刪除的行,我應該放棄這個策略並且可以移動它們嗎?請注意,我將對限制在相當少量的行的查詢有一個限制。不知道這是否有所作爲。 – user1032531
@ user1032531:'LIMIT'不會改變任何東西,在這種情況下全屏掃描更容易。 – zerkms
如果你真的有這麼多行,一個小型的int status_id,鏈接到一個具有實際狀態的表。這樣可以節省存儲空間,提高索引效率,並且可能更有效地進行搜索,因爲它是一個整數比較而不是逐個字符的字符串比較。
這個問題一般無法回答。它取決於數據,使用方法,需求等。 – zerkms
額外索引的成本是額外的'INSERT'時間。所以這取決於... –
還不夠。平均有多少刪除的行。你將如何選擇數據。 – zerkms