選擇合適的索引列順序

2022-09-06 16:39:09 字數 525 閱讀 9550

針對多列索引,如何確定哪一列位於第一列?這就要用到我前面提到的索引的選擇性。通常根據經驗法則:將選擇性最高的列放到索引最前列。

由此引入了乙個問題,計算選擇性。舉個栗子:

select * from payment where staff_id = 2 and customer_id = 268   那麼是應該建立乙個(staff_id, customer_id)索引,還是應該顛倒順序呢?我們可以通過以下方法來進行計算和比較,然後得出結論。執行以下sql語句:

select count(distinct staff_id)/count(*) as staff_id_selectivity,count(distinct customer_id)/count(*),count(*)  from payment;  結果如下:

staff_id_selectivity:0.0001

customer_id_selectivity:0.0373

count(*):16049

customer_id的選擇性更高,因此應將其放到第一列。

索引列的選擇

1.如果對於某個表中的某個字段使用了等式或範圍謂語查詢時,可以考慮將此列做為索引。2.復合索引應該注意引導列的選擇,如果在查詢中,引導列選擇不當,常常查詢時此列經常不做為條件時,那麼這樣就會使得查詢為全表掃瞄 3.有null值的列不宜新增索引,null本無實義,如果將有null列做為索引,那麼在查詢...

復合索引的列順序判斷

復合索引最令人困惑的當屬索引列的順序,不僅依賴於使用該索引的查詢,更需考慮排序和分組。前段時候我發了個帖子 where條件順序和復合索引字段順序。感興趣的朋友不妨參與討論。今天我提個自己的觀點。在應用開發階段,選擇性 是我們首要考慮因素,請看簡圖 當出現sql效能問題時,你可能需要注意以下幾個 1....

mysql選取某列 MySQL 請選擇合適的列!

字串型別 1 varchar 1 儲存可變長字串。理解 比固定長度占用更少的儲存空間,因為它只占用自己需要的空間。例外情況 使用row format fixed建立的myisam表,它為每行使用固定長度的空間,可能會造成浪費。2 儲存長度資訊。如果定義的列小於或等於255,則使用1個位元組儲存長度值...