索引是存储引擎用于快速定位记录的数据结构,相当于书的目录。无索引则全表扫描,性能随数据量线性下降。
=、<>、IN、BETWEEN、>、< 等范围查询。LIKE 'abc%' 走索引,LIKE '%abc' 不走。ORDER BY/GROUP BY 可直接利用。CHAR/VARCHAR/TEXT,中文需分词器(ngram/MeCab)。SPATIAL INDEX。-- 建表时创建
CREATE TABLE t (
id INT PRIMARY KEY,
name VARCHAR(20),
INDEX idx_name (name) USING BTREE
);
-- 单独创建
CREATE INDEX idx_name ON t(name);
CREATE UNIQUE INDEX uk_email ON t(email);
ALTER TABLE t ADD INDEX idx_name (name);
-- 删除
DROP INDEX idx_name ON t;
ALTER TABLE t DROP INDEX idx_name;
-- 查看
SHOW INDEX FROM t;
WHERE/JOIN/ORDER BY/GROUP BY 高频列建索引。ANALYZE TABLE 更新统计信息(InnoDB 采样估算,MyISAM 全量精确)。OPTIMIZE TABLE 整理碎片(InnoDB 等同重建表)。Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests 命中率。EXPLAIN 定期巡检执行计划。