Mysql索引的資料結構及索引優化

2022-09-08 07:09:11 字數 1703 閱讀 5568

索引的本質:是幫助mysql高效獲取資料的排好序的資料結構。

索引資料結構

(1)、二叉樹:儲存資料的時候是乙個鍊錶,如果要查詢0006的話要查詢6次,如果是全表掃瞄的話也得查詢6次。

弊端:二叉樹的查詢效率很低。

(2)、紅黑樹:儲存資料的時候會自旋,如果要查詢0006的話只需要查詢3次。如果是全表掃瞄或二叉樹查詢的話需要6次,紅黑樹再二叉樹的基礎上查詢效率提高了一半。

弊端:當資料量很大的時候(幾百萬或幾千萬),樹的高度就會特別高,會存在多次磁碟io操作影響其效能。解決以上的問題可以橫向擴充套件,分配節點的時候分配的大一些,讓其可以橫向儲存更多的索引元素。---- 此時b-tree誕生了。

(3)、hash:對索引的key進行一次hash計算就可以定位出資料儲存的位置,很多時候hash索引要比b+樹索引更高效。僅能滿足「=」,「in」,不支援範圍查詢。會存在hash衝突的問題。

為什麼我們使用b+tree比較多,使用hash比較少,是因為我們進行範圍查詢(select * from tabel where id > ***)的時候比較麻煩。

(4)、b-tree:葉子節點具有相同的深度,葉子節點的指標為空;所有索引元素不重複;節點中的資料索引從左到右遞增排列。

(5)、b+tree(b-tree變種):非葉子節點不儲存data,只儲存索引(冗餘),可以放更多的索引;葉子節點包含所有索引字段;葉子節點用指標連線,提高區間訪問的效能。

下面是關於儲存引擎索引的實現:

索引最左字首原理:

案例:最左字首法則,(排好序),根據聯合索引的字段順序排好序。由於第2、3條sql沒有name,不是排好序的。需要全表掃瞄。

MySQL索引及索引資料結構

索引是幫助mysql高效獲取資料的排好序的資料結構 索引分類 索引失效的情況 模糊查詢時,第乙個查詢字元是不確定值 或 時,索引失效 select name from stu where name like e 索引失效 select name from stu where name like h ...

mysql索引資料結構 mysql索引資料結構

什麼是索引?索引就是排好序的資料結構,可以幫助我們快速的查詢到資料 幾種資料結構 二叉樹 如果資料是單邊增長的情況 那麼出現的就是和鍊錶一樣的資料結構了,樹高度大 紅黑樹 在二叉樹的基礎上多了樹平衡,也叫二叉平衡樹,不像二叉樹那樣極端的情況會往乙個方向發展。同樣我們查詢6,在二叉樹中我們需要經過6個...

mysql 索引原理 索引的資料結構

快速查詢的資料型別大致有hash表,二叉樹,平衡二叉樹,b tree,b tree。hash表查詢方式是基於資料的key的hashcode得到陣列下標,如果儲存的為鍊錶,則遍歷鍊錶進行value比較 如果儲存的為紅黑樹,則用二分查詢法。所以hash表在數量量不大,並且進行等值查詢的時候效率較高,但不...