1. 程式人生 > 實用技巧 >組合索引與字首索引

組合索引與字首索引

注意,這兩種稱呼是對建立索引技巧的一種稱呼,並非索引的型別 。

組合索引

單列欄位的記錄不唯一,但多個欄位的記錄組合到一起,是唯一的 。

# 新增組合(聯合)索引
mysql> alter table students add index union_key(gender,hobby,phone); 

# 刪除組合索引
mysql> alter table students drop index union_key;

# 檢視索引
mysql> show index from students;
+----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table    | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| students |          0 | PRIMARY   |            1 | id          | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| students |          1 | union_key |            1 | gender      | A         |           7 |     NULL | NULL   | YES  | BTREE      |         |               |
| students |          1 | union_key |            2 | hobby       | A         |           7 |     NULL | NULL   | YES  | BTREE      |         |               |
| students |          1 | union_key |            3 | phone       | A         |           7 |     NULL | NULL   | YES  | BTREE      |         |               |
+----------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.00 sec)


# 組合索引的使用
前提:使用 where 條件搜尋的內容不超過全部記錄的 15% 
走索引		gender,hobby,phone
                # hobby,phone,gender // 可以正序排列成上一條件
                gender,hobby
                # hobby,gender // 可以正序排列成上一條件
                gender
不走索引		gender,phone
                # phone,gender // 不能從頭正序排列,和上一條件本質相同
                hobby,phone
                # phone,hobby // 不能從頭正序排列,和上一條本件質相同
                hobby
                phone