概述
并不是在所有的查询条件中出现的列都需要添加索引, 对于添加B+树索引, 要让访问的行数变小才有意义. 比如性别这样的字段, 一般只有两个取值: M或者F, 这时候他们的可取的范围是很小的, 称为低选择性
使用这个条件执行SQL, 可能得到的是表中50%的数据, 这样的索引是没有必要的. 而对于姓名, 这样的重复的可能性相对更小, 在此字段上建立索引是可行的.
查看选择性
通过show index from [tbl_name]
来查看某个某个表上的索引情况.其中的Cardinality
字段结果就是说明了该索引的选择性.
InnoDB底层机制
- Cardinality是通过采样完成的计算的, 而不是对所有的数据都参与计算.
- 当执行
analyze table
,show table status
,show index
或者访问information_schema
中的tables
或者statistics
表时候, 存储引擎会重新计算Cardinality
的值. 如果表中的数据量极大, 会导致计算速度很慢.