MySQL索引學習筆記
索引的定義
索引是一種可以提高查詢速度的技術,爲數據庫一列和多列數據添加一個可以快速訪問數據值的排好序的數據結構,相當於圖書的目錄,可以通過目錄快速找到對應章節的文章。通過索引可以減少磁盤的IO次數,從而提高查詢效率。
索引的優缺點
索引的優點:可以提高數據的查詢速度
缺點:在新增和更新數據時,維護索引比較耗時
索引的結構
二叉樹(紅黑樹)、Hash、Btree
二叉樹
二叉查找/搜索/排序樹 BST (binary search/sort tree)
或者是一棵空樹;
或者是具有下列性質的二叉樹:
(1)若它的左子樹不空,則左子樹上所有結點的值均小於它的根節點的值;
(2)若它的右子樹上所有結點的值均大於它的根節點的值;
(3)它的左、右子樹也分別爲二叉排序樹。
特點:樹的深度比較深,用作索引存儲會增加磁盤訪問次數,用來存儲索引效率很低,不會自動平衡。
紅黑樹
R-B Tree,全稱是Red-Black Tree,又稱爲“紅黑樹”,它一種平衡二叉樹。紅黑樹的每個節點上都有存儲位表示節點的顏色,可以是紅(Red)或黑(Black)。
紅黑樹的特性:
(1)每個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每個葉子節點(NIL)是黑色。 [注意:這裏葉子節點,是指爲空(NIL或NULL)的葉子節點!]
(4)如果一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。
(6)樹的高度隨着數據量增大會變大不可控。
B樹
B樹可以控制樹的高度,可以增大樹的寬度,可以在橫向存儲更多的索引數據。
特點:
遵循二叉樹特性,左<根<右,樹的高度減低,廣度增加可以減少IO次數提高查詢效率。
B+ 樹
特點:
非葉子節點不存儲數據,只存儲Key,可以加大寬度
葉子節點不存儲數據,只存儲指針
從樹的廣度遍歷是,橫向訪問指針提高查詢速度。
MyISAM存儲引擎索引結構
InnoDB索引存儲模式
聚集索引:
定義:數據行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,一個表中只能擁有一個聚集索引。
非聚集索引:
定義:該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同,一個表中可以擁有多個非聚集索引。