加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

面试官出的MySQL索引问题,这篇文章全给你解决!

发布时间:2019-10-13 06:32:07 所属栏目:MySql教程 来源:欧阳思海
导读:副标题#e# 0 前言 这篇文章不会讲解索引的基础知识,主要是关于MySQL数据库的B+树索引的相关原理,里面的一些知识都参考了MySQL技术内幕这本书,也算对于这些知识的总结。对于B树和B+树相关的知识,可以参考我的这篇博客:面试官问你B树和B+树,就把这篇文

MySQL数据库支持索引提示功能,索引提示功能就是我们可以显示的告诉优化器使用哪个索引,一般有下面两种情况可能使用到索引提示功能(INDEX HINT):

  •  MySQL数据库的优化器错误的选择了某个索引,导致SQL运行很慢
  •  某SQL语句可以选择的索引非常的多,这时优化器选择执行计划时间的开销可能会大于SQL语句本身。

这里我们接着上面的例子来讲解,首先,我们先为上面的t_index表添加几个索引;

  1. alter table t_index add index a (a);  
  2. alter table t_index add index b (b);  
  3. alter table t_index add index c (c); 

接着,我们执行下面的语句;

  1. EXPLAIN SELECT * FROM t_index WHERE a = 'a' AND b = 'b' AND c = 'c' G; 

面试官出的MySQL索引问题,这篇文章全给你解决!

你会发现这条语句就可以使用三个索引,这个时候,我们可以显示的使用索引提示来使用a这个索引,如下:

  1. EXPLAIN SELECT * FROM t_index USE INDEX(a) WHERE a = 'a' AND b = 'b' AND c = 'c' G; 

面试官出的MySQL索引问题,这篇文章全给你解决!

这样就显示的使用索引a了,如果这种方式有时候优化器还是没有选择你想要的索引,那么,我们可以另外一种方式FORCE INDEX。

  1. EXPLAIN SELECT * FROM t_index FORCE INDEX(a) WHERE a = 'a' AND b = 'b' AND c = 'c' G; 

面试官出的MySQL索引问题,这篇文章全给你解决!

这种方式则一定会选择你想要的索引。

2.3 索引优化

Multi-Range Read 优化

MySQL5.6开始支持,这种优化的目的是为了减少磁盘的随机访问,并且将随机访问转化为较为顺序的数据访问,这种优化适用于range、ref、eq_ref类型的查询。

Multi-Range Read 优化的好处:

  •  让数据访问变得较为顺序。
  •  减少缓冲区中页被替换的次数。
  •  批量处理对键值的查询操作。

我们可以使用参数optimizer_switch中的标记来控制是否开启Multi-Range Read 优化。下面的方式将设置为总是开启状态:

  1. SET @@optimizer_switch='mrr=on,mrr_cost_based=off'; 

Index Condition Pushdown(ICP) 优化

这种优化方式也是从MySQL5.6开始支持的,不支持这种方式之前,当进行索引查询时,首先我们先根据索引查找记录,然后再根据where条件来过滤记录。然而,当支持ICP优化后,MySQL数据库会在取出索引的同时,判断是否可以进行where条件过滤,也就是将where过滤部分放在了存储引擎层,大大减少了上层SQL对记录的索取。

ICP支持range、ref、eq_ref、ref_or_null类型的查询,当前支持MyISAM和InnoDB存储引擎。

我们可以使用下面语句开启ICP:

  1. set @@optimizer_switch = "index_condition_pushdown=on" 

或者关闭:

  1. set @@optimizer_switch = "index_condition_pushdown=off" 

当开启了ICP之后,在执行计划Extra可以看到Using index condition提示。

3 索引的特点、优点、缺点及适用场景

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读