Explain 语句和索引

table列:表示当前检索的是哪张表,<derived 2>意思是:先执行衍生的临时表(select t3.id from t3 where t3.other_col = ’ ')


select_type列:

SIMPLE:简单的select 查询,查询中不包含子查询或者UNION

PRIMARY: 查询钟包含复杂的子部分,最外层查询则被标记为

SUBQUERY: 在SELECT或WHERE列表中包含了子查询

DERIVED: 在FROM列表钟包含的子查询被标记为,MYSQL会递归执行这些子查询,把结果放在临时表里

UNION: 若第二个SELECT出现在UNION 之后,则被标记为UNION

若UNION包含在FROM子句的子查询中,外层SELECT将被标记为DERIVED

UNION RESULT:从UNION表中获取结果的SELECT


type列:访问类型排列,从最好到最差依次:

system(查找对象表只有一行数据)>

const(基于主键或者唯一索引唯一值查询,最多返回一条结果)>

eq_ref(表连接时基于主键或非NULL唯一索引完成扫描)>

ref(基于索引的等值查询,或表间等值连接)>

range(利用索引进行范围查询)>

index(执行full_index_scan并且可以通过索引完成结果扫描并且直接从索引中渠道想要的结果数据,可以避免回表)>

ALL(全表扫描)


key 列

实际使用的索引。如果为NULL,则没有使用索引

查询中若使用了覆盖索引,则该索引仅出现在key列表中,possible_key的列为NULL


覆盖索引

查询的字段和所建的索引,数量顺序类型完全一致,所谓“覆盖索引” 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。


ref 列

显示索引的哪一列被使用了,如果可能,是一个常数(const)。哪些列或常量被用于查找索引列上的值


rows列

每张表大致有多少列被查询,越小越好


一些范围查询,容易出现索引失效的问题


新建一个(catogory_id,views)组合索引,跳过范围查询的comments,然后再执行一次:

优化以后,最后走了索引


左连接,小表驱动大表,应该在右表加索引

建索引考虑:

1 建立覆盖索引,可以减少回表的次数。同时Mysql5.6 以后对二级索引做了改进,实现“索引下推”,可以减少二级索引的回表次数,具体可以通过explain 语句的extra列进行查看using index condition

SET optimizer_switch = ‘index_condition_pushdown=off’;


2 MRR(Multi range read )开启。回表的过程涉及到了随机IO,而机械硬盘是很怕随机IO的,因为寻址的开销会很大。开启mrr主要可以通过建立一个buffer,在buffer中根据辅助索引获取的结果集根据主键进行排序,将乱序化为有序,可以用主键顺序访问基表,将随机读转化为顺序读,多页数据记录可一次性读入或根据此次的主键范围分次读入,以减少IO操作,提高查询效率。另一解释:
假设一个查询有二级索引可用,读完二级索引后要回表才能查到那些不在当前二级索引上的列值,由于二级索引上引用的主键值不一定是有序的,因此就有可能造成大量的随机 IO,如果回表前把主键值给它排一下序,那么在回表的时候就可以用顺序 IO 取代原本的随机 IO。

我们可以通过参数 optimizer_switch 的标记来控制是否使用MRR,当设置mrr=on时,表示启用MRR优化。mrr_cost_based 表示是否通过 cost base的方式来启用MRR.如果选择mrr=on,mrr_cost_based=off,则表示总是开启MRR优化,参数read_rnd_buffer_size 用来控制键值缓冲区的大小。

3 写多读少的服务,可以考虑用普通索引。由于 MySQL 的普通索引中有个 change buffer 的机制。

change buffer的作用是为了降低IO 操作,避免系统负载过高。change buffer将数据写入数据页的过程,叫做merge。

如果需要更新的数据页在内存中时,会直接更新数据页;如果数据不在内存中,会先将更新操作记入change buffer,当下一次读取数据页时,顺带merge到数据页中,change buffer也有定期merge策略。数据库正常关闭的过程中,也会触发merge。

Explain分析的索引一定是最优的吗?

不一定。可能会因为回表,或者排序,让索引走错。
,顺带merge到数据页中,change buffer也有定期merge策略。数据库正常关闭的过程中,也会触发merge。

Explain分析的索引一定是最优的吗?

不一定。可能会因为回表,或者排序,让索引走错。

Explain 语句相关推荐

  1. mysql explain语句_Mysql explain 语句详解

    explain 语句详解 explain 写在 select 前,如下 mysql> explain select * from user_info where id = 2\G ******* ...

  2. MySQL中级优化教程(一)——SQL常用优化工具及explain语句的使用

    序言: 说来惭愧,java学了两年,期间虽在博客上记了一些东西,可也不曾写过什么系统的教程,前一段时间开始学习MySQL数据库优化相关的知识,就想着趁着这个机会好好整理一份电子档出来,即方便自己之后回 ...

  3. mysql extended_explain之三:MYSQL EXPLAIN语句的extended 选项学习体会,分析诊断工具之二...

    MySQL 的explain命令有一个extended选项,我想可以很多人都没有注意,因为它对命令的输出结果没有任何改变,只是增加了一个warning.这个 warning中显示了MySQL对SQL的 ...

  4. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  5. mysql的sql执行过程和explain语句

    sql的执行过程 如何优化

  6. MySQL EXPLAIN详解,left join和in优化详解,以及optimizer_trace跟踪语句使用

    最近优化mybaits的sql语句性能,网上查了查mysql的explain用法,这里记录一下,希望对大家有帮助. EXPLAIN简述: explain为mysql提供语句的执行计划信息.可以应用在s ...

  7. 分析查询语句 EXPLAIN 详解

    EXPLAIN 详解 一.概述 1.1.概述 二.基本语法 三.数据准备 1. 建表 2. 设置参数 log_bin_trust_function_creators 3. 创建函数 4. 创建存储过程 ...

  8. 简单了解SQL性能优化工具MySql Explain

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 写在前面 MySql Explain是对SQL进行性能优化不可或缺的工具,通过他我们可以对SQL进行一定的分析和性能优化,降 ...

  9. mysql union查询_一本彻底搞懂MySQL索引优化EXPLAIN百科全书

    MySQL逻辑架构介绍 日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: M ...

最新文章

  1. 悬浮球 / 悬浮按钮 / 辅助按钮
  2. 216位攻城狮送给程序猿的10个新年礼物
  3. pip升级后Import Error:cannot import name main解决方案
  4. 获取和使用某些网站的iconfont图标字体
  5. python 换页_Python之路【第十九篇】自定义分页实现(模块化)
  6. pandas入门学习
  7. Android+WebServer的GPS监控系统(设想)
  8. zabbix监控之邮件报警通知
  9. java2实用教程 第5版 课本案例
  10. SHA256算法详解及python实现
  11. NOI2022 题解
  12. 可充电点电池和不可充电电池区分?
  13. cpm,cpc,cps和cpa分别是什么意思
  14. 推荐一个免费的JSP空间
  15. 【H.264】码流解析 annexb vs avcc
  16. 深度解读扫地机器人的导航原理
  17. 互联网摸鱼日报(2023-01-21)
  18. Python编程基础(2)
  19. 华为 Telnet aaa认证模式
  20. java test before_JUnit4中@Before、@After、@Test等注解的作用

热门文章

  1. 能效最大化准则下的星地融合网络的安全波束成形算法
  2. leetcode 60. 排列序列(困难、计数法)
  3. CentOS安装Ranger
  4. Android]中国大部分城市地区的结构定义与按拼音排序
  5. MTK Android4.0.3 ICS 添加缅甸语Myanmar
  6. vue生成二维码带图标
  7. 记录使用 Vue 过程中遇到的一些技术点
  8. 【英语阅读】纽约时报 | 边走路边看手机有多危险,以及你该如何控制自己
  9. DenseNet的基本思想
  10. 2023NHOI数三角形题解