面试官出的MySQL索引问题,这篇文章全给你解决!
MySQL数据库支持索引提示功能,索引提示功能就是我们可以显示的告诉优化器使用哪个索引,一般有下面两种情况可能使用到索引提示功能(INDEX HINT):
这里我们接着上面的例子来讲解,首先,我们先为上面的t_index表添加几个索引;
接着,我们执行下面的语句;
你会发现这条语句就可以使用三个索引,这个时候,我们可以显示的使用索引提示来使用a这个索引,如下:
这样就显示的使用索引a了,如果这种方式有时候优化器还是没有选择你想要的索引,那么,我们可以另外一种方式FORCE INDEX。
这种方式则一定会选择你想要的索引。 2.3 索引优化 Multi-Range Read 优化 MySQL5.6开始支持,这种优化的目的是为了减少磁盘的随机访问,并且将随机访问转化为较为顺序的数据访问,这种优化适用于range、ref、eq_ref类型的查询。 Multi-Range Read 优化的好处:
我们可以使用参数optimizer_switch中的标记来控制是否开启Multi-Range Read 优化。下面的方式将设置为总是开启状态:
Index Condition Pushdown(ICP) 优化 这种优化方式也是从MySQL5.6开始支持的,不支持这种方式之前,当进行索引查询时,首先我们先根据索引查找记录,然后再根据where条件来过滤记录。然而,当支持ICP优化后,MySQL数据库会在取出索引的同时,判断是否可以进行where条件过滤,也就是将where过滤部分放在了存储引擎层,大大减少了上层SQL对记录的索取。 ICP支持range、ref、eq_ref、ref_or_null类型的查询,当前支持MyISAM和InnoDB存储引擎。 我们可以使用下面语句开启ICP:
或者关闭:
当开启了ICP之后,在执行计划Extra可以看到Using index condition提示。 3 索引的特点、优点、缺点及适用场景 (编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |