首页 > 数据库 >Mysql 之explain索引效率分析

Mysql 之explain索引效率分析

时间:2024-05-15 11:30:01浏览次数:32  
标签:index explain mysql 查询 索引 Mysql using where

一、explain语句

EXPLAIN [EXTENDED] SELECT select_options

二、字段分析

1、id

select识别符。这是select的查询序列号,id的值越大优先级别越高,越先被执行,如果id相同,执行顺序右上至下

2、select_type

select_type表示select语句的类型。

3、table

表示这一行的数据是关于哪张表的。

4、type

type表示的是表的连接类型。依次从最优到最差:system>const>eq_ref>ref>range>index>ALL

5、possible_keys

possible_keys列支出mysql能使用哪个索引在该表中找到行。如果这列是null,则没有相关的索引。在这种情况下,可以通过检查where子句查看它是否引用某些列或者适合索引的列来提高查询性能。如果是这样,可以创建适合的索引来提高查询的性能

6、key

key表示查询实际应用到的索引,如果没有选择索引,该列的值是null。想要强制使mysql使用或者忽视possible_type列中的索引,在查询中使用force index,use index 或者 ignore index。

7、key_len

key_len表示mysql选择的索引字段按字节计算的长度,如果键是null,则长度为null,注意通过key_len值可以确定mysql将实际使用一个多列索引中的几个字段

8、ref

ref表示使用哪个列或常数与索引一起来查询记录

9、rows

rows显示mysql表中进行查询时必须检查的行数

10、Extra

extra显示mysql在处理查询时的详细信息。

using index:覆盖索引

using where: 用where查找没有走索引,就需要优化

using index condition:查询的列如果不完全被索引覆盖 ,用到了最左原则

using temporary: 用到临时表,例:distinct去重,可以优化可以优化为using index,给去重列加索引,就会使用覆盖索引

using filesort:文件排序(内存排序,文件较大可能进行磁盘排序),可以优化为using index覆盖排序

三、索引效率分析

USING index 查询效率最高

Using where;USING index; 次于覆盖索引,使用了where过滤和索引查询

Using where 使用了where过滤

Using index condition; 使用了索引,但是要回表查询数据

Using filesort | Using temporary (两个差不多同级,效率都不高)

标签:index,explain,mysql,查询,索引,Mysql,using,where
From: https://www.cnblogs.com/yang-2018/p/18193527

相关文章

  • openGauss 修改索引时只调用索引名提示索引不存在
    修改索引时只调用索引名提示索引不存在问题现象修改索引时只调用索引名提示索引不存在。举例如下。--创建分区表索引HR_staffS_p1_index1,不指定索引分区的名称。CREATEINDEXHR_staffS_p1_index1ONHR.staffS_p1(staff_ID)LOCAL;--创建分区索引HR_staffS_p1_index2,并指......
  • docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
    一、前言在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elasticsearch中,在一些开源框架中知道了,有专门进行同步的!那就是Logstash。在思考,同步完怎么查看呢,这时Kibana映入......
  • .net DataGirdView 通过列索引修改单元格字体
    场景是这样、我需要DataGirdView某几列数量大于0字体就变成蓝色,某几列超过标准值字体就变成红色具体列名属性voidInitCols(){varcol=_DataGridView.BuildCol<DataGridViewTextBoxColumn>(dgvDetail,"OrderNo","工单号");col.Width=125;......
  • mysql+node.js前后端交互(简单实现注册登录功能)
    目录 sql文件 user.js注册部分  登录部分 对应的表操作usersql.js result.js用户提交的信息会进行格式化 ......
  • 2.集成MySQL及Redis
    连接MySQL将刚才复制的代码放在app创建后并运行文件根据警告提示复制内容根据SQLAlchemy()中的__init__()中的init_app()也可以得知没有以上内容将会警告,所以得注意代码顺序连接Redis为方便后期更换我们和Mysql一样将配置信息写入配置类通过类属性的方法使用......
  • Mysql的max()函数9大于10问题
    前言在公司老项目使用过程中都遇到过这个问题,所以这里记录下来问题描述使用系统中发现系统的字典新增之后排序不固定,于是查找问题,打开数据库发现sort大部分都是"10"mybatis中查询语句如下: `selectIFNULL(MAX(DIC_SORT),0)FROMDIC_INFOWHERE'ProjectId'=#{ProjectId}`......
  • MySQL忽略后空格符
    select"张三"="张三"#输出1select"张三"="张三"#输出0select"张三"="张三"#输出0根据上面的SQL可以看到,如果MySQL的比较条件参数是字符串,那么MySQL会自动省略字符串中的后空格。参考文档:https://deepinout.com/sql/sql-questions/146_sql_......
  • Mysql批量插入数据(python脚本)
    有个需求:需要在table1中插入205条数据,role_id固定为65,menu_id从91开始方法二:python脚本实现PyMySQL是一个纯Python编写的MySQL客户端库,用于连接和操作MySQL数据库。以下是PyMySQL的主要功能和优点:功能:数据库连接:PyMySQL提供了connect()方法,用于建立与MySQL数据库的连接。一旦......
  • Mysql批量插入数据
    有个需求:需要在table1中插入205条数据,role_id固定为65,menu_id从91开始方法一:存储过程1、什么是存储过程?MySQL存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集合。用户通过指定的存储过程名称和参数(如果有的话)来调用并执行它。存储过程可以在程序中被多次调用,并......
  • mysql 锁
    1,介绍  锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。......