mysql 索引是怎麼實現的?

時間 2021-06-12 14:06:36

1樓:

說起索引就必須要先說下資料結構和演算法。

資料結構和演算法是相互依存的,資料怎樣的儲存就意味著你需要可以使用什麼樣的演算法進行查詢。

比如你是乙個無序陣列,你想查詢某乙個name='A'的資料有哪些,你只能進行資料遍歷查詢了

但是這個陣列是按name排序的,這樣你就可以使用二分查詢或者同樣的是順序查詢,時間複雜度和空間複雜度就會少很多。

同樣 mysql 的索引也是資料結構和演算法的集合體,但是和上面不同的是mysql他考慮到了磁碟的特性。

mysql的索引首先說B+樹的資料結構,直接說B+樹有些人可能不理解,那就從二叉樹說起

看下面的圖,就是一棵二叉樹

數字小的在左邊,數字大的在右邊,這樣看你會發現這個資料結構是有序的,既然是有序的資料我們就可以使用類似二分找的演算法進行查詢,比如我要查詢結點等於5的節點我只需要判斷36和9兩次就可以找到這條資料。

那說會到mysql的B+樹,B+樹就是N叉樹,乙個節點有多個子節點的樹

MySQL的索引結構類似下面圖所示

根節點有三個資料,每個資料又對應這子節點的三條資料,不過mysql每個節點大概有1200-1400個資料,也就是說如果有四層節點深度儲存的資料量情動達到十幾億的級別。

更詳細的講解可以檢視相關部落格

深入理解MySQL索引之B+Tree_he_321的部落格-CSDN部落格_mysqlb+樹索引

小白學習elasticsearch求推薦書籍,最好能實戰?

MySQL 索引優化器選擇索引的規則是什麼?

mysqlops MySQL的優化器不是簡單基於規則或 CBO 基於成本 而混合之用,但是傾向於基於成本優化為主的模式,但是一般都會根據統計資訊,以及 SQL語句的成本,甚至伺服器的空閒程度而選擇乙個合適的計畫.並且mysql對SQL語句會進行改寫的,對於執行計畫有三個相關的引數 optimizer...

如何理解Mysql的索引及他們的原理?

安靜的木小昊 100萬個資料,順序排列,它的維護效能很好,很容易增刪改資料.但是它的檢索效能很差,最差的情況要查詢100萬次.如果將每個記錄的主鍵按照平衡樹來排列,那麼檢索效能提公升很多,最壞情況查詢log2 100萬 次.但是維護效能下降,插入乙個記錄的代價變得高了.將主鍵以平衡樹的方式儲存主鍵,...

Mysql何時在條件中命中索引的同時不會使用索引

index被用到的查詢操作一般是四種 point query where加精確條件 range query where加範圍條件 join query,order by.GROUP BY操作使用index的情景很複雜,所以沒算在內。當你的SQL只有join沒有where的時候,怎麼用index完全取...