索引基数是指索引中不重复的索引值的数量。例如,某个数据列包含值1、2、3、4、5、1,那么它的基数就是5。索引基数越高,索引的工作效果越好,因为索引基数高意味着列中包含很多不同的值,重复的值很少,这样索引在查找数据时会更高效12。
索引基数的计算方式
索引基数的计算通常采用采样的方法。以InnoDB存储引擎为例,InnoDB会对B+Tree索引的8个叶子节点的信息进行统计。具体过程如下:
- 取得B+Tree所有叶子节点的数量,记为A。
- 随机选取B+Tree索引的8个叶子节点。
- 统计每个叶子节点的不同记录的条数,记为P1, P2, ..., P8。
- 根据采样计算出Cardinality的预估值:Cardinality = (P1 + P2 + ... + P8) * A / 81。
索引基数的重要性
索引基数相对于数据表行数较高时,索引的工作效果最好。如果某数据列含有很多不同的年龄,索引会很快地分辨数据行。相反,如果某个数据列用于记录性别(只有“M”和“F”两种值),那么索引的用处就不大。如果值出现的几率几乎相等,无论搜索哪个值都可能得到一半的数据行,这种情况下最好根本不要使用索引,因为查询优化器会忽略索引,进行全表扫描12。
查看索引基数的方法
在MySQL中,可以通过以下SQL语句查看表的索引基数:
sqlCopy CodeSHOW INDEX FROM table_name;
在结果中,Cardinality列展示了该索引对应的索引基数,这是一个估计值,不是准确值。因为在实际生产环境中,数据表的更新操作非常频繁,每次数据更新都会影响索引文件,如果每次更新都要进行统计会增加系统压力
标签:数据,Tree,索引,Cardinality,基数,节点 From: https://www.cnblogs.com/ILoveJackSparrow/p/18662110