為什麼加了索引會快?資料變化B tree會怎麼變?

2021-09-13 13:51:05 字數 881 閱讀 6241

索引型別是btree(二叉樹):

① 普通索引(單列索引)

② 復合索引(組合索引)

③ 唯一索引

④ 主鍵索引

⑤ 全文索引

正是因為這個二叉樹演算法,讓查詢速度快很多,二叉樹的原理,就是取最中間的乙個數,然後把大於這個數的往右邊排,小於這個數的就向左排,每次減半,然後依次類推,每次減半,形成乙個樹狀結構圖。

問:為什麼索引結構預設使用b-tree,而不是hash,二叉樹,紅黑樹?

hash:雖然可以快速定位,但是沒有順序,io複雜度高。

二叉樹:樹的高度不均勻,不能自平衡,查詢效率跟資料有關(樹的高度),並且io代價高。

紅黑樹:樹的高度隨著資料量增加而增加,io代價高。

問:為什麼官方建議使用自增長主鍵作為索引。

結合b+tree的特點,自增主鍵是連續的,在插入過程中儘量減少頁**,即使要進行頁**,也只會**很少一部分。並且能減少資料的移動,每次插入都是插入到最後。總之就是減少**和移動的頻率。

在經典b+tree的基礎上進行了優化,增加了順序訪問指標。在b+tree的每個葉子節點增加乙個指向相鄰葉子節點的指標,就形成了帶有順序訪問指標的b+tree。這樣就提高了區間訪問效能:如果要查詢key為從18到49的所有資料記錄,當找到18後,只需順著節點和指標順序遍歷就可以一次性訪問到所有資料節點,極大提到了區間查詢效率(無需返回上層父節點重複遍歷查詢減少io操作)。

插入連續的資料:

插入非連續的資料:

mysql為什麼加索引就能快

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

為什麼加了索引sql效能提高好幾倍?

在我們日常開發中,針對mysql的sql優化,最簡單 最常用的方式就是為查詢條件加索引。那麼為什麼加個索引,sql的效能就能有明顯的提公升呢?這是因為針對沒有索引的sql語句,查詢是在磁碟中全表掃瞄過濾的,我們知道計算機中磁碟效能是最低的,相對於cpu和記憶體來說,慢的可不是一點半點。那麼索引中是怎...

100w測試資料,為什麼加了索引查詢反而變慢了?

建表 create table tb test fval varchar 50 插入測試資料 delimiter create definer root localhost procedure p teset begin declare v val varchar 20 declare v str ...