| 類型 | 特點 | 適用場景 |
| 普通索引 | 無唯一限制 | 一般查詢加速 |
| 唯一索引 | 值唯一,允許多 NULL | 業務鍵 (Email、身分證) |
| 主鍵 | 唯一+非空,每表一個 | 實體識別欄位 |
| 全文索引 | FULLTEXT,MyISAM 專用 | 長文本搜尋 |
單欄 vs 多欄 (複合) 索引
複合索引 INDEX name (last_name, first_name) 等同於按 last_name + first_name 排序的陣列。
最左前綴原則
WHERE 條件必須包含索引最左欄位才能用到索引:
-- 用到索引
WHERE last_name='Widenius'
WHERE last_name='Widenius' AND first_name='Michael'
WHERE last_name='Widenius' AND first_name>='M' AND first_name<'N'
-- 用不到索引
WHERE first_name='Michael'
WHERE last_name='Widenius' OR first_name='Michael'
建立語法
-- 普通
CREATE INDEX idx_name ON tbl (col);
-- 唯一
CREATE UNIQUE INDEX idx_email ON users(email);
-- 複合
CREATE INDEX idx_ln_fn ON users(last_name, first_name);
ALTER TABLE 同樣支援上述三類。
- 上一篇文章: Linux 下 MySQL 安裝、備份與 Root 密碼找回全攻略
- 下一篇文章: 百萬級 MySQL 分頁查詢優化:從 LIMIT 偏移量陷阱到索引順序逆襲
Copyright ©
程式碼之家 All Rights Reserved