1、使用 COUNT(DISTINCT column_name) 可以查看该字段中有多少个唯一值,从而判断字段的选择性(selectivity)。
SELECT COUNT(DISTINCT `column_name`) / COUNT(*) AS selectivity
FROM `table_name`;
选择性越高(接近 1),表示字段的唯一值越多,重复值越少,添加索引的效果越好。
选择性低(接近 0),表示大量重复值,索引可能无法有效过滤数据,效果较差。
2、查看该字段的分布情况
SELECT `column_name`, COUNT(*) AS cnt
FROM `table_name`
GROUP BY `column_name`
ORDER BY cnt DESC
LIMIT 10;
如果某个值占比特别高(如超过 80%),说明该字段的过滤效果较差,添加索引意义不大。
如果值分布比较均匀,说明索引可能带来显著的性能提升。
3. 使用 EXPLAIN 分析查询计划
EXPLAIN SELECT * FROM `table_name` WHERE `column_name` = 'some_value';
如果 rows 列显示的数值较大,说明需要扫描较多行,此时添加索引可能会显著提升性能。
如果 type 是 ALL,说明当前是全表扫描,建议添加索引。
4. 使用索引模拟工具(如 INDEX_MERGE 或 FORCE INDEX)
EXPLAIN SELECT * FROM `table_name` FORCE INDEX (idx_column_name) WHERE `column_name` = 'some_value';
注意:前提是该索引已经存在,否则需要先创建一个测试索引。
5. 创建测试索引并分析(可选)
如果上述方法还不够明确,可以在测试环境中创建该索引后,再使用 EXPLAIN 分析查询计划,观察是否使用了索引以及扫描的行数是否减少。
CREATE INDEX idx_column_name ON `table_name` (`column_name`);
6.总结
|
评估方式 |
说明 |
|
COUNT(DISTINCT column) |
判断字段选择性 |
|
GROUP BY 分布 |
查看字段值分布 |
|
EXPLAIN 查询计划 |
分析当前查询是否使用索引 |
|
测试索引 |
在测试环境创建索引验证效果 |

被折叠的 条评论
为什么被折叠?



