在关系型数据库里,SQL索引直接决定了查询的响应速度。制定合理的索引选择策略,既要了解不同索引类型的特点,也要结合字段的选择性来判断是否值得建索引。下面从基础概念讲起,逐步说明分析方法。

常见索引类型与适用场景
主流关系型数据库通常支持多种索引类型,最常用的是B树索引,它适合范围查询和等值查询。哈希索引仅支持等值匹配,查询极快但不支持排序与范围扫描。全文索引用于处理文本检索。建索引前应先明确查询模式。
B树索引
B树索引以平衡树结构存储,对WHERE条件中的列做等值或范围过滤都很有效,也是默认索引类型。
哈希索引
哈希索引通过哈希函数定位,只适用于等值查询,例如缓存表的主键查找,但不支持ORDER BY与LIKE前缀匹配。
什么是索引选择性
索引选择性是指该列中不同取值数量与总行数的比值。比值越接近1,说明重复值越少,索引过滤效果越好。计算公式如下:
选择性 = COUNT(DISTINCT column) / COUNT(*)
例如性别字段只有男和女,选择性极低,单独建索引往往无效;而用户手机号选择性很高,非常适合建索引。
如何结合选择性做索引选择
计算选择性的SQL示例
可以用下面语句评估某列的选择性:
-- 查看用户表中 email 字段的选择性 SELECT COUNT(DISTINCT email) / COUNT(*) AS selectivity FROM user;
复合索引与最左前缀
当多个列常一起出现在查询条件中,可以建复合索引。应将选择性高的列放在最左边,以利用最左前缀原则提升命中率。
| 字段组合 | 建议顺序 | 原因 |
|---|---|---|
| status, user_id | user_id, status | user_id选择性高,放前面过滤更多行 |
避免低效索引的实践
- 不要对低选择性字段单独建索引,如是否删除标志。
- 控制单表索引数量,避免影响写入性能。
- 使用执行计划确认索引是否被使用,例如EXPLAIN语句。
使用EXPLAIN检查索引命中
-- 检查查询是否使用了索引 EXPLAIN SELECT * FROM user WHERE user_id = 100 AND status = 1;
通过上述类型分析与选择性计算,可以系统地制定SQL索引选择策略,在查询性能与维护成本之间取得平衡。