MYSQL中為什麼索引不宜建在重複資料多的列上

2021-08-28 19:26:39 字數 760 閱讀 9129

昨天想了一天這個問題

首先我們先粗略的說一說:

加入有乙個查詢語句要查詢性別為男生的資料,因為這樣的資料很多,我們要掃瞄很多次索引,然後再去取這個性別為男的資料。

那麼分為兩部分,先掃瞄索引,然後去取這個符合要求的資料

如果我們不建立索引,那麼去掃瞄整個表。

不建立索引需要的時間=t掃瞄整個表                            建立索引需要的時間= t去索引中取+t取相應的資料條件 

我們去考慮一種極限,如果性別全為男,那麼我們建立索引去查詢的時間就是t掃瞄整個索引表+t掃瞄整個表。那麼耗時肯定過大了。所以得出我們的結論

我們在通過innodb和myisam來細說

myisam中:就是類似於上面的描述,需要先去掃瞄索引樹,再去掃瞄表。

innodb中:它的索引和資料在一起,它的非聚簇索引中保留了當前列和主鍵列的索引,每次查還要去主鍵索引查詢整個信心,因為主鍵的索引是包含所有節點資訊的,那麼非聚簇索引向聚簇索引轉換時就會出現問題時間消耗,如同上面的情況。

有人可能會問,如果放在聚簇索引上查詢重複多個列,那不就沒關係了,問題是聚集索引是唯一的,不能重複

關於索引的儲存結構:

這兩篇文章都不錯,不過我覺得第一篇寫的更好。

mysql為什麼加索引就能快

平時我們要優化 mysql 查詢效率的時候,最常見的就是給表加上合適的索引了,那今天就來聊聊為什麼加了索引就快了呢。很多人會說索引就相當於一本書的目錄,通過目錄來找書中的某一頁,確實是很快的,如果沒有目錄,就需要一頁一頁的去翻書了,大大降低了效率。這個比喻其實還挺恰當的,也是乙個很經典的索引比喻了。...

為什麼使用索引

資料庫物件索引其實與書的目錄非常相似,主要是為了提高從表中檢索資料的速度。由於資料儲存在資料庫表中,所以索引是建立在資料庫表物件上的,由表中的乙個欄位或多個字段生成的鍵組成,這些儲存在資料結構 b 樹或雜湊表 中,通過mysql可以快速有效的查詢與鍵值相關聯的字段。根據索引的儲存型別,可以將索引分為...

我們為什麼要用索引,用索引為什麼比不用索引快

經過老楊的細心指點,我才真正的明白 理解 記住 以前曾看過索引的資料,時間長都忘啦 老楊問我如果一張表上沒有索引,你要查id 5的記錄,資料庫會怎麼做?我說資料庫會先根據資料字典找到這張表,然後根據表頭的記錄找到這張表的資料塊,然後每個資料塊去找。老楊 會把所有的資料塊都掃一遍嗎?我 有可能會,有可...