索引的选择性
索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980
个不同的值,那么这个索引的选择性就是1980/2000=0.99。
一个索引的选择性越接近于1,这个索引的效率就越高。
如果是使用基于cost的最优化,优化器不应该使用选择性不好的索引。如果是使用基于rule的最优化,优化
器在确定执行路径时不会考虑索引的选择性(除非是唯一性索引),并且不得不手工优化查询以避免使用非
选择性的索引。
例如:
SELECT
COUNT(DISTINCT order_id)/COUNT(*) AS id,
COUNT(DISTINCT pay_name)/COUNT(*) AS pay,
COUNT(*)
FROM order_info t;
结果:
+--------+--------+----------+
| id | pay | COUNT(*) |
+--------+--------+----------+
| 1.0000 | 0.0000 | 407658 |
+--------+--------+----------+
1 row in set
得出order_id的索引选择性比pay_name高。