索引是幫助資料庫系統高效獲取資料的一種資料結構,能加快資料的查詢速度。大部分時候,索引會儲存在磁碟上的檔案中的,可能儲存在單獨的索引檔案中,也可能和資料一起儲存在資料檔案中。索引是在儲存引擎中實現的,不同的儲存引擎,其索引的資料結構可能不同(即可能使用不同資料結構去實現索引)。mysql預設的儲存引擎innodb,其使用的索引為b+樹結構組織。b+樹是b樹的一種特殊型別,其區別在於b+樹只有葉子節點儲存資料,且葉子節點使用指標指向組成有序鍊錶。
適當的使用索引,可以加快資料的查詢速度,但使用不當也會適得其反。使用索引究竟有什麼好處和壞處呢?下面是使用索引的優劣對比說明。
優勢
被索引的列會自動排序,包括單列索引和組合索引,當使用order by按照列順序進行排序時,可以提高效率
劣勢
每次對資料進行增刪改,更新資料表資料時,也需要更新索引,所以效率有所降低
從使用者使用角度劃分,索引分類包括單列索引、組合索引、全文索引和空間索引。比較常用的是單列索引和組合索引。
單列索引
單列索引又分為以下3種
組合索引
組合索引是在表中的多個字段組合上建立的索引,其使用遵循最左字首原則(最左匹配原則)。除了主鍵索引外,一般情況下,建議使用乙個組合索引代替多個單列索引,相較於多個單列索引,乙個組合索引可以節省儲存空間。
從儲存引擎儲存邏輯角度劃分,可以分為主鍵索引、次要索引和組合索引,主鍵索引和次要索引儲存的是單列索引。
對索引的建立、刪除等操作可以參考 快速入門mysql
指資料記錄儲存在主鍵索引中,通過主鍵索引,就可以獲取記錄所有的列,也就是說資料和索引是在一起(乙個檔案中),這就是聚集索引。 innodb儲存引擎其索引屬於聚簇索引(主鍵索引),即其索引樹的葉子節點儲存了資料記錄(行)。
與聚簇索引相反,索引和資料分開檔案儲存的,稱這類索引為非聚簇索引,myisam儲存引擎屬於此類。myisam索引樹葉子節點儲存的是資料記錄在資料檔案中的記憶體位址。
主鍵索引
innodb的主鍵索引為聚簇索引,它按照如下規則建立
以下是innodb主鍵索引的儲存結構示意圖,其中藍色塊的數字為主鍵id的值
輔助索引
輔助索引也稱為次要索引,即非主鍵列建立的其它單例索引。其葉子節點儲存的是主鍵id。查詢時,通過輔助索引匹配到主鍵id後,再到主鍵索引中檢索資料。輔助索引其儲存結構如下圖所示,其中藍色塊為非主鍵列的值
組合索引
組合索引的儲存結構和輔助索引類似,區別是輔助索引中的用於檢索的key的值(即藍色塊)不是一列,而是由多個列組成,二者最終的葉子節點儲存的都是主鍵id的值。
mysql 聚簇索引例項 MySQL聚簇索引
mysql作為迭代了很多個版本的資料庫。在資料庫的索引上實現了很多的優化版本,從一開始的只允許乙個表有乙個列為索引值,到目前版本可支援多個列建立索引值,更多關於索引優化版本的描述,以後有機會筆者再寫一篇文章。本文主要介紹索引當中的聚簇索引。mysql官方對聚簇索引的定義是,聚簇索引並不是一種單獨的索...
mysql聚簇索引設定 Mysql 聚簇索引
整體概述 1.innodb的主索引檔案上 直接存放該行資料,稱為聚簇索引,次索引指向對主鍵的引用 2.myisam中,主索引和次索引,都指向物理行 磁碟位置 哈哈,說了兩句貌似聽不懂的話。一。通俗解釋 我們可以這麼理解 聚簇索引 innodb 索引的葉節點就是資料節點,下邊實打實有資料。非聚簇索引 ...
mysql 聚簇索引表 Mysql的聚簇索引
聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。innodb的聚簇索引實際上是在同乙個結構中儲存了b tree索引和資料行。乙個表只能有乙個聚簇索引。innodb中,葉子頁包含了行的全部資料,但是節點頁只包含了索引列。innodb通過主鍵聚集資料。優點 1.可以把相關資料儲存在一起。例如實現...