mysql索引选择错误的解决方案

/ 默认分类 / 0 条评论 / 4672浏览

理解本质

在数据库里面,扫描行数是影响执行代价的因素之一,也是影响优化器选择索引的一大因素。扫描的行数越少,意味着访问磁盘数据的次数越少,就用调用系统io,就会导致cpu资源(三级缓存与内存与磁盘)的切换,消耗的 CPU 资源越少。但是,优化器还会结合是否使用临时表、是否排序等因素进行综合判断。 因为排序,临时表等,可能导致mysql判断出错。

步骤:

一、排查代码问题。确定是否因为函数(mysql内置函数),或者隐式函数(字符集)导致

二、不是自己的问题,就是mysql的问题了。那么会有两种方案。

 1、 直接force index,强制使用指定索引。如果是5.6的话,更倾向于优化器选错索引,直接force index。

 2、analyze table t; 可能是由于某些事务或者一些奇奇怪怪的原因导致,优化器拿到的索引基数错误。刷新索引基数即可。

解决slow log步骤

1、explain sql。

发现索引选错。

2、检查代码,无误。

3、先来一个analyze。

4、如果不顶事儿,直接指定索引。