為什麼重複值高的字段不能建索引(比如性別欄位等

2021-09-19 06:48:30 字數 424 閱讀 2598

結論(以innodb為例)

a、非聚簇索引儲存了對主鍵的引用,如果select欄位不在非聚簇索引內,就需要跳到主鍵索引(上圖中從右邊的索引樹跳到左邊的索引樹),再獲取select字段值

b、如果非聚簇索引值重複率高,那麼查詢時就會大量出現上圖中從右邊跳到左邊的情況,導致整個流程很慢

c、如果where值重複率高的字段,select用了limit,只查較少資料,也就是跳的次數很少的情況下,還是可以建索引的(後來想想也沒必要,limit限制了數量,全表掃瞄也很快,除非字段值是排序的,必須掃瞄完前面的所有值)

d、如果沒有3這個前提,則不建議在值重複率高的字段上建索引,因為查詢效率低,還需要維護索引

為什麼重複值高的字段不能建索引(比如性別欄位等

結論 以innodb為例 a 非聚簇索引儲存了對主鍵的引用,如果select欄位不在非聚簇索引內,就需要跳到主鍵索引 上圖中從右邊的索引樹跳到左邊的索引樹 再獲取select字段值 b 如果非聚簇索引值重複率高,那麼查詢時就會大量出現上圖中從右邊跳到左邊的情況,導致整個流程很慢 c 如果where值...

為什麼狀態少的字段不能建索引

此處以sqlserver為示例做演示。大多教科書和前輩們都說狀態少的字段不要建索引,由此帶來的開銷還不如不建索引,但是這句話有多少人真的知道,或者說有多少人真的對此有比較深刻的理解,而不是聽別人道聽途說。這樣記得快,忘記的也不慢。這篇我來分析一下這句話到底有幾個意思。一 現象 首先我們還是用測試資料...

c 為什麼結構中不能有例項字段初始設定值項

結構宣告在 棧區 類宣告在堆區 人們在操作計算機的時候只能操作棧區 那這樣說怎麼操作類呢?就是在堆區的類 在棧區有乙個位址 所以我們可以操作這個位址 而間接的操作類.弄清楚這個概念後 就是結構和類了 結構直接存在棧區 所以棧區直接有值和位址 在執行時是直接呼叫的 所以如果沒有值就會空指標異常.所以 ...