【MySQL】高效能的索引
阿新 • • 發佈:2021-12-12
【MySQL】高效能的索引
1、B-Tree
B-Tree索引適用於全鍵值、鍵值範圍或者鍵字首查詢(最左字首)。
- 全值匹配
- 匹配最左字首
- 匹配列字首
- 匹配範圍值
- 精準匹配某一列並範圍匹配另外一列
- 只訪問索引的查詢
2、B樹索引優點:
- 數值臨近的索引,在儲存空間上臨近,可以為 order by 、 group by 提供優化手段
- 索引中備份了構成給索引的欄位值,如果查詢請求只需要這些欄位,可以避免回表查詢整行資料
3、索引評價三星指標:
- 是否將相關的行臨近存放
- 存放順序是否和查詢順序一致
- 是否包含查詢需要的列
4、聯合索引儲存結構
5、高效能索引策略
1、獨立列,指索引列不能是表示式的一部分,也不能是函式引數
2、字首索引和索引選擇性
MySQL不允許索引BLOB
,TEXT
,或者很長的VARCHAR
型別的列完整長度。所以對這種列只能使用字首索引,選擇足夠的長度以保證較高的選擇性。
---字首索引
ALTER TABLE TABLE_NAME ADD KEY (列(長度));
--- 例如
ALTER TABLE A1 ADD KEY (colum1(7))
3、多列索引
如果 EXPLAIN
某語句使用了index_merge
,需要檢查索引建的是否合理。
mysql> EXPLAIN SELECT film_id, actor_id FROM film_actor -> WHERE actor_id = 1 OR film_id = 1\G *************************** 1. row ************************** id: 1 select_type: SIMPLE table: film_actor type: index_merge possible_keys: PRIMARY,idx_fk_film_id key: PRIMARY,idx_fk_film_id key_len: 2,2 ref: NULL rows: 29 Extra: Using union(PRIMARY,idx_fk_film_id); Using where
4、選擇合適的索引順序
選擇索引列順序的經驗法則:將選擇性最高的列放到索引最前列。(適應大部分情況)。
6、聚簇索引
聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。InnoDB的聚簇索引實際上在同一個結構中儲存了B-Tree索引和資料行。
資料在InnoDB中儲存示例圖:
聚簇索引示意圖:
二級索引(普通索引)示例圖
聚簇索引與非聚簇索引對比圖:
在InnoDB資料庫,避免使用類似UUID這種無序資料作為主鍵。
使用UUID主鍵大量插入資料後,用 ANALYZE TABLE 重建索引的統計數值。
好學若飢,謙卑若愚