平均值组大小
了解平均值组大小
总数据量 / 值组 = 平均值组大小
- 值组是一组具有相同键前缀值的行,及所有相等的键为一个值组。
- 总数据量为全表数据量
MySQL什么时候会使用平均值组大小
- 估算每次ref访问 必须读取多少行
(EXPLAIN中,type中的ref,访问索引时,同一个参数可能有多个相同的值) - 估计部分联接将产生多少行;也就是说,这种形式的操作将产生的行数:
select * from table_1 JOIN table_2 ON table_2.id = table_1.id;
平均值组大小对于索引选取的影响
随着索引的平均值组大小的增加,该索引在这两个用途中的作用不大,因为每次查找的平均行数增加。为了使索引更好地用于优化目的,最好将每个索引值作为目标表中的行数。
当某个索引会扫描大量的行时,该索引的用处不大,MySQL不太可能使用它。
例如,user1中有20W条数据。
sex建立索引,值组为 2(因为只有男女两种值),组值平均大小为 10w(假设男女数量一致。)
province建立索引,值组为 34(全国有34个省、省级市直辖区等), 组值平均大小为: 20w/34 约为 5882 (假设每个省数据量一致)
对比可知,sex的平均值组