MySQL索引知识点
MySQL索引知識點
目錄
1. B+ Tree 原理
1. 數據結構
2. 操作
3. 與紅黑樹的比較
紅黑樹等平衡樹也可以用來實現索引,但是文件系統及數據庫系統普遍采用 B+ Tree 作為索引結構,主要有以下兩個原因:
(一)更少的查找次數
(二)利用磁盤預讀特性
2. MySQL 索引
索引是存儲引擎層實現的,而不是在服務器層實現的,所以不同存儲引擎具有不同的索引類型和實現。
1. B+ Tree 索引
2. 哈希索引
哈希索引能以 O(1) 時間進行查找,但是失去了有序性:
- 無法用于排序與分組
- 只支持精確查找,無法用于部分查找和范圍查找。
InnoDB 存儲引擎有一個特殊的功能叫“自適應哈希索引”,當某個索引值被引用的非常頻繁時,會在 B+ Tree 索引之上再創建一個哈希索引,這樣就讓 B+ Tree 索引具有哈希索引的一些優點,比如快速的哈希查找。
3. 全文索引
4. 空間數據索引
3. 索引優化
1. 獨立的列
在進行查找時,索引列不能是表達式的一部分,也不能是函數的參數,否則無法使用索引。
例如下面的查詢不能使用 actor_id 列的索引。
2. 多列索引
在需要使用多個索引作為條件進行查詢時,使用到列所有比使用單個所有的性能更好。例如下面的語句中,最好把 actor_id 和 film_id 設置為多列索引。
3. 索引列的順序
讓選擇性最強的索引放在前面。
索引的選擇性是指:不重復的索引值和記錄總數的比值。最大為1,此時每個記錄都有唯一的索引與其對應。選擇性越高,每個記錄的區別度越高,查詢效率也越高。
例如下面顯示的結果中 customer_id 的選擇性比 staff_id 更高,因此最好把 customer_id 列放在多列索引的前面。
4. 前綴索引
對于 BLOB、TEXT 和 VARCHAR 類型的列,必須使用前綴索引,只索引開始的部分字符。
前綴長度的選取需要根據索引選擇性來確定。
5. 覆蓋索引
索引包含所有需要查詢的字段的值。
具有以下優點:
- 索引通常遠小于數據行的大小,只讀索引能大大減少數據訪問量。
- 一些存儲引擎(例如 MyISAM)在內存中只緩存索引,而數據依賴于操作系統來緩存,而數據依賴于操作系統來緩存。因此,只訪問索引可以不使用系統調用(通常比較費時)
- 對應 InnoDB 引擎,若輔助索引能夠覆蓋查詢,則無需訪問主索引。
4. 索引的優點
- 大大減少了服務器需要掃描的數據行數
- 幫助服務器避免進行排序和分組,以及避免創建臨時表(B+ Tree 索引是有序的,可以用于 ORDER BY 和 GROUP BY 操作。臨時表主要是在排序和分組過程中創建,不需要排序和分組,也就不需要創建臨時表)
- 將隨機 I/0 變為順序 I/O(B+ Tree索引是有序的,會將相鄰的數據都存儲在一起)
5. 索引的使用條件
- 對于非常小的表,大部分情況下簡單的全表掃描比建立索引更高效;
- 對于中到大型的表,索引就非常有效;
- 但是對于特大型的表,建立和維護索引的代價將會隨之增長。這種情況下,需要用到一種技術可以直接區分需要查詢的一組數據,而不是一條記錄一條記錄的匹配。例如可以使用分區技術。
總結
以上是生活随笔為你收集整理的MySQL索引知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hive查询操作
- 下一篇: linux cmake编译源码,linu