資料庫索引 MySQL

2021-10-06 13:42:59 字數 2582 閱讀 1093

mysql 索引分類

索引的建立時機

mysql 官方對索引的定義為: 索引(index) 是幫助 mysql 高效獲取資料的資料結構。 可以得到索引的本質:索引是資料結構

可以簡單理解為排好序的快速查詢資料結構。

在資料之外, 資料庫系統還維護著滿足特定查詢演算法的資料結構, 這些資料結構以某種方式引用(指向) 資料,這樣就可以在這些資料結構上實現高階查詢演算法。 這種資料結構, 就是索引。 下圖就是一種可能的索引方式示例:

左邊是資料表, 一共有兩列七條記錄, 最左邊的是資料記錄的實體地址。 為了加快 col2 的查詢, 可以維護乙個右邊所示的二叉查詢樹, 每個節點分別包含索引鍵值和乙個指向對應資料記錄實體地址的指 針, 這樣就可以運用二叉查詢在一定的複雜度內獲取到相應資料, 從而快速的檢索出符合條件的記錄。

一般來說索引本身也很大, 不可能全部儲存在記憶體中, 因此索引往往以索引檔案的形式儲存的磁碟上。

優點:

缺點:

mysql 使用的是 btree 索引。

初始化介紹

一顆 b 樹, 淺藍色的塊我們稱之為乙個磁碟塊, 可以看到每個磁碟塊包含幾個資料項(深藍色所示) 和指標(黃色所示),如磁碟塊 1 包含資料項 17 和 35, 包含指標 p1、 p2、 p3,p1 表示小於 17 的磁碟塊, p2 表示在 17 和 35 之間的磁碟塊, p3 表示大於 35 的磁碟塊。

真實的資料存在於葉子節點即 3、 5、 9、 10、 13、 15、 28、 29、 36、 60、 75、 79、 90、 99。

非葉子節點只不儲存真實的資料, 只儲存指引搜尋方向的資料項, 如 17、 35 並不真實存在於資料表中。

查詢過程

如果要查詢資料項 29, 那麼首先會把磁碟塊 1 由磁碟載入到記憶體, 此時發生一次 io, 在記憶體中用二分查詢確定 29 在 17 和 35 之間, 鎖定磁碟塊 1 的 p2 指標, 記憶體時間因為非常短(相比磁碟的 io) 可以忽略不計, 通過磁碟塊 1 的 p2 指標的磁碟位址把磁碟塊 3 由磁碟載入到記憶體, 發生第二次 io, 29 在 26 和 30 之間, 鎖定磁碟塊 3 的 p2 指標, 通過指標載入磁碟塊 8 到記憶體, 發生第三次 io, 同時記憶體中做二分查詢找到 29, 結束查詢, 總計三次 io。

真實的情況是, 3 層的 b+樹可以表示上百萬的資料, 如果上百萬的資料查詢只需要三次 io, 效能提高將是巨大的,如果沒有索引, 每個資料項都要發生一次 io, 那麼總共需要百萬次的 io, 顯然成本非常非常高。

b+tree 與 b-tree 的區別

為什麼說 b+樹比 b-樹更適合實際應用中作業系統的檔案索引和資料庫索引?

聚簇索引並不是一種單獨的索引型別, 而是一種資料儲存方式。 術語『聚簇』 表示資料行和相鄰的鍵值聚簇的儲存在一起。 如下圖, 左側的索引就是聚簇索引, 因為資料行在磁碟的排列和索引排序保持一致。

聚簇索引的好處:

按照聚簇索引排列順序, 查詢顯示一定範圍資料的時候, 由於資料都是緊密相連, 資料庫不不用從多個資料塊中提取資料, 所以節省了大量的 io 操作。

聚簇索引的限制:

對於 mysql 資料庫目前只有 innodb 資料引擎支援聚簇索引, 而 myisam 並不支援聚簇索引。由於資料物理儲存排序方式只能有一種, 所以每個 mysql 的表只能有乙個聚簇索引。 一般情況下就是該錶的主鍵。

為了充分利用聚簇索引的聚簇的特性, 所以 innodb 表的主鍵列盡量選用有序的順序 id, 而不建議用無序的 id, 比如 uuid 這種。

概念:即乙個索引只包含單個列, 乙個表可以有多個單列索引

概念:索引列的值必須唯一, 但允許有空值

概念:設定為主鍵後資料庫會自動建立索引, innodb為聚簇索引

概念:即乙個索引包含多個列

本部落格參考於尚矽谷課件

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

mysql更新索引庫 Mysql資料庫索引增刪改查

一.索引的作用 一般的應用系統,讀寫比例在10 1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重。在資料量和訪問量不大的情況下,mysql訪問是非常快的,是否加索引對訪問影響不大。但是當資料量和訪問量劇增的...

MySQL資料庫索引

mysql資料庫索引 目錄 1 myisam與innodb的區別 2 索引的優缺點 3 如何選用索引 4 檢視索引 5 雜湊索引 6 b 樹 7 索引分類 1 myisam與innodb的區別 1 show engines 圖1.1 截圖1 a mysql資料表主要支援如圖所示的儲存引擎,分為 事務...