虽然读书时有学索引,但是一直都是一知半解的状态,现在需要重新拾起来,需要好好了解一下,一个概念一个概念的来。
学习来源:这里:http://www.jb51.net/article/89450.htm
定义:基数是数据列所包含的不同值的数量。
例如,某个数据列包含值1、3、7、4、7、3,那么它的基数就是4(只有1、3、4、7这四个数)。
效率问题:
- 索引的基数相对于数据表
行数较高
(也就是说,列中包含很多不同的值,重复的值很少)的时候,它的工作效果最好
。 - 如果某数据列含有很多不同的年龄,索引会很快地分辨数据行。如果某个数据列用于记录性别(只有”M”和”F”两种值),那么索引的用处就不大。
- 如果值出现的
几率几乎相等
,那么无论搜索哪个值都可能得到一半的数据行。在这些情况下,最好根本不要使用索引
,因为查询优化器发现某个值出现在表的数据行中的百分比很高的时候,它一般会忽略索引,进行全表扫描。 - 惯用的百分比界线是”30%”。现在查询优化器更加复杂,把其它一些因素也考虑进去了,因此这个百分比并不是MySQL决定选择使用扫描还是索引的唯一因素。