索引列的選擇

2021-07-07 05:07:16 字數 700 閱讀 4610

1.如果對於某個表中的某個字段使用了等式或範圍謂語查詢時,可以考慮將此列做為索引。

2.復合索引應該注意引導列的選擇,如果在查詢中,引導列選擇不當,常常查詢時此列經常不做為條件時,那麼這樣就會使得查詢為全表掃瞄

3.有null值的列不宜新增索引,null本無實義,如果將有null列做為索引,那麼在查詢必然出現全表掃瞄,故常常作為索引的列需要新增not null宣告,避免null的出現

4.謂語的基數也很重要,如果某列只有有限且可知的值時,那麼此例不宜作為索引,例如:性別,是否類似的條件,狀態,顏色,等等,可以這樣假設,如果性別作為索引,那麼就只有兩個值,故不管是何值,在均勻分布的情況下都有50%的命中率,不能最大程度的縮小查詢集。

5.如果能確定某欄位某個值在某列中最少,在查詢時宜採用些這個值作為查詢條件,它可以最大程度的縮小結果集

6.根據實際業務的需要,選取擁有合適選擇度的列作為索引

7.不宜將頻繁修改的列作為索引,因為這樣會增加對其增加,修改,刪除的維護索引的成本

8.考慮索引列的長度很重要,如果索引列的長度很長,無疑增加了索引的尺寸,增加了undo和redo的區大小

9.在多列索引中,如果引導列只有很少的唯一值,換名話說就是 引導列很多值重複出現的概率很高,此時宜考慮將其修改為壓縮索引

10.不要在謂語條件中對索引列使用函式,這樣會使得索引失效

11.不要在大量修改的列上使用位圖索引,這樣會增加點陣圖的索引的資源維護成本

選擇合適的索引列順序

針對多列索引,如何確定哪一列位於第一列?這就要用到我前面提到的索引的選擇性。通常根據經驗法則 將選擇性最高的列放到索引最前列。由此引入了乙個問題,計算選擇性。舉個栗子 select from payment where staff id 2 and customer id 268 那麼是應該建立乙個...

譯 索引列,列選擇率和等式謂詞

本篇文章也可以叫做 建立索引時那一列應該放到最前面 通常對於索引列的選擇的通常準則都是把最高選擇率 譯者注 所謂選擇率指的是在where子句中作為選擇條件使用次數的比例來說的 的列放在最前面,我接下來並不是要說這個準則不對,因為這個準則本身是正確的。但通常在給出這個準則的同時並沒有同時給出為什麼要把...

譯 索引列,列選擇率和等式謂詞

本篇文章也可以叫做 建立索引時那一列應該放到最前面 通常對於索引列的選擇的通常準則都是把最高選擇率 譯者注 所謂選擇率指的是在where子句中作為選擇條件使用次數的比例來說的 的列放在最前面,我接下來並不是要說這個準則不對,因為這個準則本身是正確的。但通常在給出這個準則的同時並沒有同時給出為什麼要把...