java面试一日一题:mysql的索引下推了解吗
问题:请问你了解索引下推吗
分析:该问题主要考察对mysql优化方面的理解
回答要点:
主要从以下几点去考虑,
1、mysql中索引的概念?
2、索引下推的理解及意义?
在面试过程中问到mysql,必然会问到索引,问到索引肯定会问索引失效有哪些情况,问到索引失效,必然会问到索引下推。如果可以抗住这样的连环追问,必然会给面试官留下深刻的影响。
索引下推是在非主键索引,或者说二级索引/联合索引的情形下,索引的匹配规则遵循最左原则,最左原则会因为like或范围判断而后面的索引失效,这时在mysql5.6后引入了索引下推的概念,来优化查询效率。
例,select id,name,age from student where name like '张%' and age=32;
在普通的无索引的查询情况下,mysql会进行全表扫描,逐行判断是否符合查询条件;
现在建立(name,age)的联合索引
在建立了索引后,mysql会先扫描索引树,根据索引树找到符合条件的记录主键(innodb引擎下),然后回表逐行判断age条件进而查询整行记录;由于使用了like且包含%,根据最左匹配的原则,只会使用联合索引中的name,而age会失效。但在5.6后由于使用了索引下推,那么仍然会通过索引树判断age的值,返回符合条件的主键进而返回整行记录;
索引下推的意义
在没有索引下推的情况下,假如通过索引树找到符合条件的记录为1000条,那么会通过回表的方式找到1000行的数据逐行判断age是否符合条件;
在使用索引下推的情况下,假如通过索引树判断符合name条件的记录为1000条,通过索引下推判断符合age条件的为100条,那么通过回表的方式找到100行记录即可;
通过上面的分析可以看到使用了索引下推,可以很好的避免回表查询的行数,也就是减少了随机IO的次数,通过索引判断肯定比通过逐行判断要快的多;
索引下推的使用场景
在联合索引下,like、范围(> < between and)的情况会遵循最左匹配的原则,遇到这样的字段后面的条件不会用到索引,而有了索引下推便可以继续利用索引进行判断。
例,student表的(name,ange)联合索引,
select name,age from student where name like '王%' and age=21;
select name,age from student where age >20 and name like '王%';
select name ,age from student where age between 16 and 21 and name ='tom';
上面的sql在mysql5.6及之后均会使用到索引下推,而且是覆盖索引。

java面试一日一题:mysql的索引下推了解吗的更多相关文章
- java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...
- java面试一日一题:讲下mysql中的undolog
问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- java面试一日一题:java中垃圾回收算法有哪些
问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...
- java面试一日一题:java中的垃圾回收器
问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...
- java面试一日一题:讲下mysql中的索引
问题:请讲下mysql中的索引 分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质? 回答要点: 主要从以下几点去考虑 1.索引的本质是什么 2.mysql的索引分类: 3 ...
- java面试一日一题:讲对mysql的MVCC的理解
问题:请讲下对mysql中MVCC的理解 分析:这个问题要回答的是对MVCC的理解,以及MVCC解决了什么问题这几个方面入手. 回答要点: 主要从以下几点去考虑, 1.什么是MVCC? 2.MVCC用 ...
- java面试一日一题:请讲下对mysql的理解
问题:请讲下对mysql的理解 分析:该问题主要考察对mysql的理解,基本概念及sql的执行流程 回答要点: 主要从以下几点去考虑, 1.mysql的整体架构? 2.mysql中每一个组件的作用? ...
- java面试一日一题:mysql中的自增主键
问题:请讲下mysql中的自增主键 分析:该问题主要考察对mysql中自增主键的掌握,使用场景及如何设置 回答要点: 主要从以下几点去考虑 1.什么自增主键 2.使用场景是什么: 3.innodb_a ...
- java面试一日一题:mysql事务是如何实现的
问题:请讲下mysql的事务是如何实现的 分析:该问题主要考察对事务的理解及实现方式: 回答要点: 主要从以下几点去考虑, 1.对事务的概念的理解? 2.事务的实现方式? 讲到mysql的事务,很快可 ...
随机推荐
- HTML——input之单行文本框
在 HTML 中,把 <input> 标签的 type 属性设置为 text 可以表示单行文本框,又叫做常规文本框.具体语法格式如下: <input type="text& ...
- aardio桌面软件开发 简单,打包后文件小,支持 .net python 和 众多插件
aardio 编程语言 - 官网 aardio 专注于桌面软件开发,17年一直保持非常活跃地更新( 更新日志 ),aardio 被多年用于生产项目实践,久经测试和锤炼.aardio 在诞生之初就设计 ...
- .Net Core 静态类获取注入服务
由于静态类中无法使用有参构造函数,从而不能使用常规的方式(构造函数获取) 获取服务,我们可以采取通过IApplicationBuilder 获取 1.首先创建一个静态类 using Microsoft ...
- Cmockery学习
什么是cmockery? 是一个轻量级的C语言单元测试框架 什么是单元测试? 单元测试就是测试一个系统的最小实现单元,往往是函数 示例解析 #include <stdarg.h> #inc ...
- lodash已死?radash库方法介绍及源码解析 —— 判断方法篇
前言 大家好,我是阿瓜.一个励志分享更多技术的前端瓜 ~ 我们已经分享了 radash 库中数组.对象等相关的方法,大家感兴趣的可以前往主页查看阅读: 或许你最近在某个地方听过或者看过 radash ...
- Exception:kylin构建cube, Cannot modify mapReduce.queue.name at runtime
Failed to open new session: java.lang.IllegalArgumentException: Cannot modify tez.queue.name at runt ...
- mysql这个垃圾迁移数据费劲半天
mysql垃圾得很! 对于一些小系统还可以.大型系统自己找麻烦--必须有高昂的人工费! 没有高昂的人工(必须有好的程序员和工程师才能解决一些复杂的问题),构建基于大量数据的应用,非常麻烦. 而这些费 ...
- nginx中多个server块共用upstream会相互影响吗
背景 nginx中经常有这样的场景,多个server块共用一个域名. 如:upstream有2个以上的域名,nginx配置两个server块,共用一个upstream配置. 那么,如果其中一个域名发生 ...
- 【Playwright+Python】系列教程(二)手把手带你写一个脚本
一.如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下: 1.同步写法: from playwright.sync_ap ...
- html2canvas 页面截屏
$(document).ready(function () { $(".example1").on("click", function (event) { va ...