对MYSQL的explain中extra using where的理解
这本来是个简单的玩意儿,但我始终不太明白这个到底是什么情况下才会出现,又代表了什么。
来看一下mysql官方文档对using where的解释:
A WHERE clause is used to restrict which rows to match against the next table or send to the client.
原谅我的愚蠢,还是一头雾水。(有知道的大佬还希望能指点一下,万分感谢!)
再来看看高性能MYSQL第三版对它的解释:
using where 代表MYSQL服务器层将在存储引擎层返回行以后再应用WHERE过滤条件;
好像有点感觉了,但还是差点;
这个链接https://www.oschina.net/question/232911_2307882中的查询我用mysql5.7实验不会有using where;
https://blog.csdn.net/jeffrey11223/article/details/79100761这个链接中的一些例子在mysql5.7也不对;
那就来做下实验吧。我建了个表,有一个联合索引key(join_index_1, join_index_2),还有一个普通字段pwd;
explain select `pwd` from `lb_user_5` where `join_index_1` = 'fsda';
-> extra的值为NULL,key表示用了索引;
-> 因为联合索引嘛,所以在存储引擎层就利用where条件找到了相应的记录,然后回表,再取出pwd值,所以server层是不需要再使用where条件过滤的;
explain select `join_index_2` from `lb_user_5` where `join_index_1` = 'fsda';
-> extra的值为using index,使用了联合索引;
-> 这个和上面类似,只是不需要回表,直接扫描联合索引树就可以了,where条件还是在存储引擎层过滤的;
explain select `join_index_1` from `lb_user_5` where `join_index_2` = 'fsda';
-> extra的值为using where;using index,依然使用了联合索引;
-> 首先这个不符合最左匹配,按理说是不能使用联合索引的,但这里的select值决定了是可以使用的;因为我们要select的值也正好在这个联合索引树中,所以mysql会直接扫描这个联合索引树,而不会全表扫描;而这里是需要using where的,因为join_index_2在这个联合索引中是没有排好序的(不明白的就去查一下“最左匹配原则”),所以必须对这棵联合索引树进行“全表扫描”,存储引擎层扫描完后将所有的结果发送到了服务器层,这时服务器层需要使用`join_index_2` = 'fsda'来进行过滤,所以就有了using where;
另外提一下,我在自己做实验之前也在看了其他的一些文章,例如这一篇
https://blog.csdn.net/jeffrey11223/article/details/79100761
但我在5.7中用他的sql实验发现
explain select aaa from table where xxx=’something’和 explain select yyy from table where xxx=’something’
都没有using where;
我不知道是版本的原因还是什么;
所以说,实践才是检验真理的唯一标准,大家一定要自己去试试,说不定会有意外的发现。
对MYSQL的explain中extra using where的理解相关推荐
- mysql的explain中type取值与SQL性能优化的关系
本文转载自[1],对[1]进行了整理 explain结果中的type字段列表: type字段取值 说明 SQL示范 扫描条件 建表特点 system 系统表,少量数据,往往不需要进行磁盘IO: ex ...
- Mysql explain 中的extra字段 解读
extra 是 explain 中比较重要的一个属性指标之一,标识着SQL语句的索引使用情况. 接下来 讲讲常用见的几种状态. Using filesort 这种情况是在使用 order by 关键字 ...
- mysql之执行计划——explain中的extra详解
之前一直对explain中的extra和type两个类型混淆.其实两者完全不同,type列和覆盖索引毫无关系,它只是表示这个查询访问数据的方式,或者说是MySQL查询行的方式. 我们使用一个例子来讲解 ...
- JAVA中Explain注解用法,mysql之explain详解(分析索引最佳使用)
mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...
- mysql explain中key_len值的说明
在mysql 的explain的输出中,有个key_len的列,其数据是如何计算的呢? 在看到了淘宝的dba以前发布的博客后,我在mysql 5.6上操作一番,了解了一点. 环境准备 – 创建表. u ...
- mysql key_len_浅谈mysql explain中key_len的计算方法
mysql的explain命令可以分析sql的性能,其中有一项是key_len(索引的长度)的统计.本文将分析mysql explain中key_len的计算方法. 1.创建测试表及数据 CREATE ...
- mysql执行计划中 性能最好_MySQL性能优化-explain执行计划
explain用于获取查询执行计划信息, 一.语法 只需要在select前加上explain即可,如: mysql> explain select 1; +----+-------------+ ...
- Explain信息中Extra字段解释
文章目录 explain 执行计划中 extra 常见内容说明 extra 字段内容 Using filesort Using temporary Using index Using index co ...
- MySQL和Oracle中的隐式转换
今天在处理一个问题的时候,需要根据其他部门提供的sql语句对一个表中的数据进行了筛查. 语句类似下面的形式 > SELECT MAX_LEVEL,LOGOUT_TIME,CURRENT_DATE ...
最新文章
- “假一赔十”的4k 120Hz电视能买吗?研究完我服了,水是真的深
- python3 psutil模块 进程和系统信息
- Smarty变量调节器的使用
- tomcat server.xml各个端口的作用
- python文件读取 ,json文件的存储
- 使用Java程序通过http post访问Application server
- shell 文件路径有空格_Python学习第57课-shell入门之基本简单命令(一)
- node 创建静态服务器并自动打开浏览器
- 老兵不死:Radionomy正式宣布收购Winamp
- 谈谈大型分布式网站架构技术总结
- Oracle的共享关闭 独有关闭和共享更新关闭 (2)
- 算法合集之《信息学中守恒法的应用》
- 430单片机实现三人投票表决器_基于51单片机的三人表决器设计.doc
- Turbo码相关学习
- 指派问题java实现_指派问题及实现代码示例.ppt
- 线程的学习,和线程的相关概念及多线程的学习指引
- python实践报告的心得体会_动物医学实践报告心得体会
- 医用计算机是什么意思,pc是什么意思(全网最全解读pc寓意)
- Machine Learning读书会,面试算法讲座,算法公开课,创业活动,算法班集锦
- 万字讲解OpenWrt防火墙iptables,并使用UCI配置防火墙
热门文章
- WordPress 使用 CDN 后获取访客真实 IP
- 单元节点和积分点有什么区别
- 小米智能插座、小米温湿度计2、涂鸦灯泡 接入Home Assistant
- 自制动漫小姐姐图片api
- 微信小程序 实现美团外卖 菜单分类,左右联动 效果
- 英语修辞手法( rhetorical devices)
- ubantu + anaconda + TensorFlow 1.13.1
- 哔哩哔哩 2019校园招聘 开发工程师-2018.09.21
- 机器人视觉系统由哪些结构组成?
- Vue 2.x折腾记 - (16) 基于Ant Design Vue 封装一个配置式的表单搜索组件