mysql怎么加工作 mysql表里怎么添加数据( 四 )


3.2 扫描行数
MySQL 在真正开始执行语句之前 , 并不能精确的知道满足这个条件的记录有多少条,只能通过索引的区分度来判断 。显然,一个索引上不同的值越多,索引的区分度就越好,而一个索引上不同值的个数我们称为“基数”,也就是说,这个基数越大,索引的区分度越好 。
MySQL 使用采样统计方法来估算基数:采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值 , 得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数 。而数据表是会持续更新的,索引统计信息也不会固定不变 。所以,当变更的数据行数超过 1/M 的时候,会自动触发重新做一次索引统计 。
在 MySQL 中,有两种存储索引统计的方式 , 可以通过设置参数 innodb_stats_persistent 的值来选择:
on 表示统计信息会持久化存储 。默认 N = 20,M = 10 。
off 表示统计信息只存储在内存中 。默认 N = 8,M = 16 。
由于是采样统计,所以不管 N 是 20 还是 8,这个基数都很容易不准确 。所以,冤有头债有主,MySQL 选错索引,还得归咎到没能准确地判断出扫描行数 。
可以用 来重新统计索引信息 , 进行修正 。
3.3 索引选择异常和处理1. 采用 force index 强行选择一个索引 。2. 可以考虑修改语句,引导 MySQL 使用我们期望的索引 。3. 有些场景下,可以新建一个更合适的索引,来提供给优化器做选择,或删掉误用的索引 。
【mysql怎么加工作 mysql表里怎么添加数据】关于mysql怎么加工作和mysql表里怎么添加数据的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读