在 MySQL 中創建索引時,需要注意以下事項,以確保索引高效且合理:
1. 選擇合適的索引類型
- 主鍵索引(PRIMARY KEY):每個表只能有一個,默認是聚簇索引。
- 唯一索引(UNIQUE):確保列中的數據唯一。
- 普通索引(INDEX):加快查詢速度,但不保證唯一性。
- 全文索引(FULLTEXT):用于全文搜索(僅適用于
MyISAM
、InnoDB
)。 - 前綴索引(PREFIX):對長字符串列,索引前幾個字符可節省存儲空間。
2. 避免過多索引
- 索引會加快查詢,但增加存儲占用,降低插入、更新、刪除性能。
- 僅對高頻查詢、WHERE 條件列、JOIN 關聯列建立索引。
3. 選擇合適的列建立索引
- 選擇高選擇性列(如
id
、email
),避免低選擇性列(如gender
只有男/女
)。 - 索引長度盡量短,對長字符串可以用前綴索引。
- 避免對 BLOB、TEXT 建索引,可以用
VARCHAR(N)
。
4. 使用聯合索引(復合索引)
- 最左匹配原則:MySQL 使用索引時,從左到右匹配索引字段。
- 避免冗余索引:不要建立功能重復的索引,如
(
a,
b)
和(
a)
,后者是冗余的。 - 考慮索引順序:常用于查詢的列放前面,如
WHERE a = ? AND b = ?
,則索引INDEX(a, b)
更有效。
5. 避免索引失效
- 避免函數操作:
WHERE LEFT(name,3) = 'abc'
會導致索引失效。 - 避免隱式類型轉換:
WHERE phone = 123456
,若phone
為VARCHAR
,索引失效。 - 避免 OR 語句:
WHERE a = 1 OR b = 2
,MySQL 可能不會使用索引。
6. 監控索引使用情況
- 使用
EXPLAIN SELECT ...
查看查詢是否走索引。 SHOW INDEX FROM table_name;
查看表的索引情況。ANALYZE TABLE table_name;
更新索引統計信息。
總結:合理設計索引,遵循最左匹配,避免冗余索引,優化索引長度,關注查詢模式,并定期分析索引使用情況,才能讓索引真正提高 MySQL 性能。🚀