索引
索引是提高查询性能的数据结构。本章介绍如何创建和使用索引。
创建索引
sql
-- 单列索引
CREATE INDEX idx_name ON users(name);
-- 复合索引
CREATE INDEX idx_city_age ON users(city, age);
-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);删除索引
sql
-- 删除索引
DROP INDEX idx_name ON users;
-- MySQL 语法
ALTER TABLE users DROP INDEX idx_name;索引类型
- B-Tree 索引(默认)- 适用于大多数查询
- Hash 索引 - 适用于等值查询
- 全文索引 - 适用于文本搜索
- 空间索引 - 适用于地理数据
何时使用索引
应该创建索引:
- WHERE 子句中的列
- JOIN 条件列
- ORDER BY 列
- 经常查询的列
不应该创建索引:
- 小表
- 频繁更新的列
- 低基数列(如性别)
查看索引
sql
-- 查看表的索引
SHOW INDEX FROM users;
-- 查看索引使用情况
EXPLAIN SELECT * FROM users WHERE name = 'Zhang San';性能优化
sql
-- 使用覆盖索引
CREATE INDEX idx_name_age ON users(name, age);
SELECT name, age FROM users WHERE name = 'Zhang San';
-- 前缀索引
CREATE INDEX idx_email_prefix ON users(email(10));小结
- 索引提高查询速度
- 但会降低写入速度
- 合理使用索引
- 定期维护索引
下一步: 学习 TRANSACTIONS 事务