基数指的是一个字段中不重复值的个数。
比如性别列,它的值有男和女两种情况,所以它的基数是2
以scott账户的emp表为例,执行以下sql
select count(1) as num,count(distinct job) as jobnum,count(distinct deptno) from emp
由结果可以看出,emp表的行数为14,job列的基数为5,deptno列的基数为3
当字段的基数越大时,该列数据的分布可能就越均衡。字段的基数越小时,该列数据的分布可能就越不均衡。举个例子说,10000行数据的表中,性别字段的基数为2,它的分布可能为男9999行,女1行。而身份证字段的基数为10000,每一个号码的行数都是1.
我们可以通过group by语句来查看数据的分布情况
select deptno,count(1) from emp group by deptno
一般情况下,当查询结果返回表中5%以内的数据时,应该走索引,返回5%以外的数据时,不走索引。我们可以根据这个原则来决定该字段是否应该建立索引。