

新闻资讯
技术学院索引拆分本质是依查询频率、组合及数据分布,优先为高频高选择性字段建单列索引,再按“等值在前、范围在后”设计联合索引,并利用覆盖索引减少回表,定期清理冗余索引。
索引拆分不是简单地把一个大索引改成多个小索引,而是根据查询条件的使用频率、组合方式和数据分布,把高频、高选择性的过滤字段优先独立建索引,再按需补充联合索引。核心目标是让每个关键查询都能命中“最短、最匹配”的索引路径,避免全表扫描或索引失效。
重点关注 WHERE 子句中独立出现、且有较高区分度(如用户ID、订单状态、创建日期)的字段。例如:
独建 B+ 树索引联合索引的字段顺序不能随意。原则是:高选择性字段在前,等值查询字段在前,范围查询字段放最后。比如常见复杂查询:
(user_id, status, created_at)
(status, category, updated_at) 支持过滤+排序(created_at, user_id) 这类把范围字段放前面的组合——它无法有效支持 user_id = ? 单独查询如果查询只涉及少数几个字段(如 SELECT id, status, updated_at FROM orders WHERE user_id = ?),可在联合索引中直接包含 SELECT 字段:
(user_id, status, updated_at, id) —— 注意 id 是主键,自动包含,但显式写出更清晰运行 SHOW INDEX FROM table_name 和 SELECT * FROM sys.schema_unused_indexes(MySQL 8.0+)查看未被使用的索引。特别注意:
(a) 和 (a, b) 共存时,单列索引 (a) 往往可删(除非 b 基数极低或查询只查 a)