數據結構比較
二叉樹
不適合自增長索引,失去索引效率,樹單邊增長,成鏈表狀。
(從1插入到4)
紅黑樹(平衡二叉樹)
不適合數據量大,樹太高。如果查找數據在葉子節點,則需要查樹高次數。
(從1插入到5)
hash表
hash衝突,並且不支持範圍查詢,大於小於區間查詢。
mysql支持,等於查詢能快速定位,只適合數據量特別大,範圍查詢很少,性能要求很高場景。
B+Tree
data放在葉子節點, 非葉子節點不存data,只存索引,可以放更多的索引,順時針訪問指針,提高了區間訪問性能。
支持範圍查詢,左節點比父節點小,右節點比父節點大,並且葉子節點有雙向地址指針定位。
B-Tree
非葉子節點帶data,增加了每次IO的內存佔用。
沒有B+Tree葉子節點的指針,不方便範圍查詢。
注:1.樹結構默認左節點小於父節點,右節點大於父節點。
2.mysql庫中表沒有建主鍵索引會默認自己找一個唯一字段建索引,如果沒有會新建一個字段維護一個索引結構在後臺。
所以建表時應建主鍵索引,而建立自增的主鍵索引可以減少葉子節點的變動,有利於索引維護。
索引類型
主鍵索引(唯一 非空)
普通索引 ()
唯一索引 (唯一 可有一空)
全文索引
組合索引 (兩個或者多個字段索引)
當爲普通索引時,先查普通索引找到主鍵,然後再根據主鍵查整行數據(回表)
select * from member where name = 'lili' (回表)
select id from member where name ='lili' 不用回表直接取出
當爲組合索引時,滿足最左匹配原則 ,即組合索引左邊的要先滿足,才能滿足右邊索引。
(name ,age)
select * from member where name ='lili' and age =1 (滿足)
select * from member where name ='lili' (滿足)
select * from member where age =1 (不滿足)
select * from member where age =1 and name ='lili' (優化器把條件調換位置 ,滿足)
mysql全文索引一般不用,一般會用es等進行全文索引。