Mysql深入了解 索引

2021-10-23 19:03:06 字數 1659 閱讀 1062

為什麼b+tree把data都移到葉子節點,並且增加雙向鍊錶?(b+tree比b-tree的改進)

將data移動到葉子節點,非葉子節點儲存的索引數變多,在高度相等的情況下,能儲存的data更多,查詢效率自然就高了

為什麼使用b+tree而不使用紅黑樹或者跳表

區域性性原理:資料和程式都有聚集成群的侵向。之前被讀取過的資料,很可能很快被下一次讀取

磁碟預讀原理:記憶體和磁碟互動的基本單元是頁,每次讀取都是頁的整數倍

最最主要的問題是和作業系統中磁碟的i/o有關。資料庫利用了磁碟預處理原理,將單個節點設定為頁的整數倍的大小(磁碟儲存的基本單位),每次讀取乙個節點就相當於一次i/o操作。b+tree讀取乙個節點所需要載入的節點個數比紅黑樹,跳表要少的多(紅黑樹和跳表載入乙個節點需要載入很多父節點),並且b+tree的根節點載入後的重複利用率也高

按資料結構分:

按邏輯分:

聯合索引

按物理儲存分:

聚集索引

非聚集索引索引不是越多越好

不要在經常變動的資料加索引(尤其是update),維護起來非常複雜

小資料量的表不需要加索引

索引一般加在常用來查詢的字段上

乙個資料夾對應乙個資料庫

table.frm 表定義資訊

table.ibd 資料和索引的儲存 (innodb儲存引擎)

table.myd 資料儲存

table.myi 索引儲存

儲存引擎是形容資料庫表的!!

為什麼innodb的表必須要建主鍵?

如果innodb表沒有建主鍵,則mysql會自動為表新增主鍵。

innodb是根據主鍵組織的乙個索引結構檔案,所以必須有主鍵

為什麼innodb推薦使用整形的自增主鍵?

在根據索引查詢時,會跟索引進行大小的比較,整形適合大小的比較,而uuid效率低

整形占用記憶體必uuid要小的多,節約成本(主要是占用執行時記憶體的空間)

並且整形自增對insert語句帶來的維護索引的成本要低,insert語句執行也會更快

儲存引擎對比

儲存引擎

innodb

myisam

事務支援

支援不支援

資料行鎖定

支援不支援(是用表鎖)

外來鍵約束

支援不支援

全文索引

不支援支援

表空間大小

較大約為myisam的倆倍

較小索引

主鍵索引採用聚集索引,輔助索引的data存主鍵的值

主索引和輔助索引一樣,data全是存位址 ,但是主索引的值唯一

memory

常規使用操作:對查詢頻率高,資料量比較大的建立索引

索引字段經常選擇 where子句中最常用,過濾效果最好的

使用唯一索引,區分度越高,使用索引的效率越高

索引不是多多益善,對增刪改比較頻繁的表,不要建立索引

使用最左字首,n個列組合而成的組合索引,相當於是建立了n個索引,如果where子句中使用了索引的前幾個字段,則可以用此來提高效率

回表

深入了解MySQL的索引

一 關於儲存引擎 建立合適的索引是sql效能調優中最重要的技術之一。在學習建立索引之前,要先了解mysql的架構細節,包括在硬碟上面如何組織的,索引和記憶體用法和操作方式,以及儲存引擎的差異如何影響到索引的選擇。myisam一種非事務性的儲存引擎,是mysql 5.5之前版本預設的儲存引擎。inno...

深入了解MySQL的索引

一 關於儲存引擎 建立合適的索引是sql效能調優中最重要的技術之一。在學習建立索引之前,要先了解mysql的架構細節,包括在硬碟上面如何組織的,索引和記憶體用法和操作方式,以及儲存引擎的差異如何影響到索引的選擇。myisam 一種非事務性的儲存引擎,是mysql 5.5之前版本預設的儲存引擎。inn...

深入理解mysql索引 深入了解mysql索引

1 索引原理 索引被用來快速找出在乙個列上用一特定值的行。沒有索引,mysql不得不首先以第一條記錄開始,然後讀完整個表直到它找出相關的行。表越大,花費時間越多。對於乙個有序字段,可以運用二分查詢 binary search 這就是為什麼效能能得到本質上的提高。myisam和innodb都是用b t...