1. 程式人生 > 其它 >【MySQL】高效能的索引

【MySQL】高效能的索引

【MySQL】高效能的索引


1、B-Tree

B-Tree索引適用於全鍵值、鍵值範圍或者鍵字首查詢(最左字首)。

  1. 全值匹配
  2. 匹配最左字首
  3. 匹配列字首
  4. 匹配範圍值
  5. 精準匹配某一列並範圍匹配另外一列
  6. 只訪問索引的查詢

2、B樹索引優點:

  1. 數值臨近的索引,在儲存空間上臨近,可以為 order by 、 group by 提供優化手段
  2. 索引中備份了構成給索引的欄位值,如果查詢請求只需要這些欄位,可以避免回表查詢整行資料

3、索引評價三星指標:

  1. 是否將相關的行臨近存放
  2. 存放順序是否和查詢順序一致
  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 重建索引的統計數值。

好學若飢,謙卑若愚