基数
在数据库中,某一列的唯一键(distinct Keys)的数量叫作基数。
比如性别列,该列只有男女之分,所以这一列基数是2。主键列的基数等于表的总行数。
查看某个列的基数。
select count(distinct column_name) from table_name;
选择性
列的基数与表中总行数的比值再乘以100%就是某个列的选择性。
列的选择性可以衡量数据库索引能够帮助缩小对表中特定值的搜索范围的程度。
查看某个列的选择性。
select Concat((count(distinct column_name) / count(*))*100,'%') from table_name;
我们知道索引最重要的目的之一是尽可能地缩小匹配行的初始候选值,从而减少io,提升查询性能。所以通常来说索引的选择性越高则查询效率越高,因为选择性高的索引可以让数据库在查找时过滤掉更多的行。
了解列的选择性的作用
帮助我们更好地创建复合索引。
在建立复合索引时,一般我们要把选择性更高的列放在前面,以尽可能地缩小匹配行的初始候选值。
帮助我们更好地创建前缀索引。
比如在mysql中,建立前缀索引的意义在于相对于整列建立索引,前缀索引仅仅是选择该列的部分字符作为索引,减少索引的字符可以节约索引空间,从而提高索引效率,但这样也会降低索引的选择性。
建立合理前缀索引的诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长(以便节约空间)。
那么