mysql选错娱乐平台源码搭建《企娥21717 93408》索引的原因与处理
1执行计划预估行数错误
2order by和主键类型不同导致
索引基数
一个索引上不同的值越多,这个索引的区分度就越好。而一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好。
我们可以使用 show index方法,看到一个索引的基数。
MySQL 是怎样得到索引的基数的呢? 这里,我给你简单介绍一下 MySQL 采样统计的方法。
为什么要采样统计呢?因为把整张表取出来一行行统计,虽然可以得到精确的结果,但是代价太高了,所以只能选择“采样统计”。
采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。
而数据表是会持续更新的,索引统计信息也不会固定不变。所以,当变更的数据行数超过 1/M 的时候,会自动触发重新做一次索引统计
扫描行数
根据基数来估算每个索引对应的需要扫描行数
explain sql;
对应的rows是mysql预估的扫描条数
analyze table t;重新统计索引的行数
为什么有时会得到错误的扫描行数?
原文地址:https://www.cnblogs.com/wochenfu/p/10148454.html
时间: 2024-09-29 00:11:43