加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

口试官出的MySQL索引题目,这篇文章全给你办理!

发布时间:2019-10-12 09:06:58 所属栏目:编程 来源:欧阳思海
导读:0 媒介 这篇文章不会讲授索引的基本常识,首要是关于MySQL数据库的B+树索引的相干道理,内里的一些常识都参考了MySQL技能黑幕这本书,也算对付这些常识的总结。对付B树和B+树相干的常识,可以参考我的这篇博客:口试官问你B树和B+树,就把这篇文章丢给他 1

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 索引的特点、利益、弱点及合用场景

(编辑:湖南网)

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

热点阅读