一个列唯一键(Distinct_Keys)的数量叫作基数。比如性别列,该列只有男女之分,所以这一列基数是 2。
**看test表中owner列基数大小,object_id是表的主键**
![](https://box.kancloud.cn/000d4ce78e669a8d2720b24a93a3b6fa_1057x181.png)
**看test表中owner列基数的数据分布:**
![](https://box.kancloud.cn/edea500578c8083c3388838ca527c904_910x743.png)
**看owner="scott"的记录占整个表所有数据的百分比**
![](https://box.kancloud.cn/c85ed1e1602d1cfe61b26a0fdb6bb6f9_1121x273.png)
**查看某列的各个基数分布**
在做 SQL 优化的时候,如果怀疑列数据分布不均衡,我们可以使用 select 列名, count(*) from 表 group by 列名 order by 2 desc 。
当查询结果是返回表中 5%以内的数据时,应该走索引;当查询结果返回的是超过表中 5%的数据时,应该走全表扫描。
如果某个列基数很低,该列数据分布就会非常不均衡,由于该列数据分布不均衡,会导致 SQL 查询可能走索引,也可能走全表扫描。