MySQL实战第二篇

154 阅读1分钟

MySQL为什么有时候会选错索引? MySQL如何判断一个查询的扫描行数?

通过explain命令可以看到某个通过索引的查询语句的相关信息,row代表扫描的行数

img

索引基数如何计算?通过那个参数可以设置索引统计的存储方式?

索引基数通过采样的方式获取,InnoDB默认选择N个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,这就得到了索引的基数。在MySQL中有两种存储索引统计的方式,可以通过设置参数innodb_stats_persistent的值来选择:设置为 on 的时候,表示统计信息会持久化存储。这时,默认的 N 是 20,M 是 10。设置为 off 的时候,表示统计信息只存储在内存中。这时,默认的 N 是 8,M 是 16。

可以重新统计索引信息的命令是什么?

analyze table t命令可以用来重新同居索引信息

如何定位索引异常这样的问题?

通过explain来查看语句使用了哪个索引,执行了多少行等信息

索引异常的问题可以有哪几种处理方式?

采用force index强行选择索引;考虑修改语句,引导MySQL使用我们期望的索引;在有些场景下新建一个更适合的索引,来提供给优化器做选择,或删掉误用的索引。