首页 > 数据库 >MySQL-explain篇

MySQL-explain篇

时间:2023-12-22 23:12:06浏览次数:35  
标签:eq const 级别 explain 查询 索引 MySQL ref

工具介绍

  • 模拟优化器执行SQL语句
  • 分析你的查询语句或是结构的性能瓶颈
  • 执行查询会返回执行计划的信息
  • from 中包含子查询,仍会执行该子查询,将结果放入临时表中

type

  • system:system是const的特例
  • const:读取一次
  • eq_ref:primary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录。这可能是在const 之外最好的联接类型了,简单的 select 查询不会出现这种 type。
  • ref:相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行
  • range:范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行
  • index:通常扫描二级索引,扫描全索引拿到结果
  • all:全表扫描,可以考虑通过增加索引进行优化

效率对比:system>const>eq_ref>ref>range>inex>ALL

1、system级别
A、只有一条数据的系统表
B、或衍生表只能有一条数据的主查询

很明显 实际开发当中 我们是不会只有一条数据的

2、const级别
仅仅能查出一条的SQL语句并且用于Primary key 或 unique索引;
SELECT * from shop where id=?
主键索引、唯一索引和unique索引达到这个级别,sql要根据公司的业务去写,这个情况也很难达到的。

3、eq_ref级别
唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多,不能0);

此种情况常见于唯一索引和主键索引;

4、ref级别

非唯一性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)。

5、range级别
检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询 (between,in,> < >=);
in有时有可能会失效,导致为ALL;

6、index级别
把索引的数据全查出来 就是这个级别了

7、ALL级别
不走索引,就是ALL级别。

标签:eq,const,级别,explain,查询,索引,MySQL,ref
From: https://www.cnblogs.com/nxjblog/p/17922511.html

相关文章

  • mysql报错:Duplicate entry ‘...‘ for key ‘field‘
    错误信息"Duplicateentry'...'forkey'field'"表示在数据库表中,你正在尝试插入一条数据的'number'字段的值已经存在。这通常是由于你设置了'field'字段为唯一键(UNIQUEKEY),而你又尝试插入一个已存在的值。解决这个问题的方法有以下几种:检查输入的数据:确保你插入的数据在该字段......
  • mysql 报错 Duplicate entry ‘xxx‘ for key ‘字段名‘
    有时候对表进行操作,例如加唯一键,或者插入数据(已经有唯一键),会报错Duplicateentry...forkey...原因是primarykey(主键)或uniquekey(唯一键)的值重复。还有索引也会导致。碰到这种情况,考虑是否需要主键或唯一键的约束,如果不需要,就直接删除约束。在navicat上有√可以选。命令行如下删除......
  • MYSQL LIKE 优化
    1、多字段like模糊查询优化:最常见的写法:wherealike'%xx%'orblike'%xx%'orclike'%xx%'这种写法查询效率低,经过调查,下面的方法可以替代,并且效率高:2、如果like的关键字相同:whereinstr(nvl(a,'')||nvl(b,'')||nvl(c,''),'xx')>0把要模糊......
  • mysql-binlog恢复命令
    查看是否开启binloq:showvariableslike'logbing';开启binlog:log-bin="LAPTOP-7FRIEVH7-bin关闭binlog:skip-log-bin生成新的binlog文件:方式一:重启mysq1服务使用命令flushlogs方式二:查看binlogshowbinlogeventsin'ECS-56099351-bin.00001';将binlog日志并......
  • Scrapy爬网站数据,存到MySQL
    一、框架简介1.1、简介  Scrapy框架是用纯Python实现的一个为了爬取网站数据、提取结构性数据而编写的可扩展的开源应用框架,只需要少量代码就能够快速地实现数据爬取。往往手写一个爬虫需要进行发送网络请求、数据解析、数据存储、反反扒机制、异步请求等步骤,如果都从零开始......
  • cpp-opt-mysql
    title:c++操作mysql数据库author:TokisakiGalaxytop:falsecover:falsetoc:truecomments:truemathjax:falsenoindex:falsesitemap:truedate:2020-09-1214:17:04img:coverImg:excerpt:C++操作mysql数据库tags:-C++-mysqlcategories:-编程pas......
  • 关于debezium同步mysql字段类型的datetime、date、time、timestamp的格式转换说明
    1.情景展示使用debezium的插件:debezium-connector-oracle(io.debezium.connector.mysql.MySqlConnector),自动读取mysql日志binlog相关表的数据变更记录,然后将其发布到kafkatopic当中。现在遇到的问题是:在mysql当中,表示日期类型的数据类型有:datetime、date和timestamp;表示时间......
  • mysql给指定账号取消drop权限
    要修改MySQL用户的权限,可以使用以下步骤:1、登录MySQL服务器:mysql-uroot-p2、选择数据库:如果要修改用户在特定数据库中的权限,可以选择对应的数据库。例如:USEyour_database;3、查看当前用户权限:SHOWGRANTSFOR'username'@'hostname';将'username'替换为要修......
  • MySQL数据库-2
    MySQL数据库-2第09章子查询#第09章子查询SELECTlast_name,salaryFROMemployeesWHEREsalary>( SELECTsalary FROMemployees WHERElast_name='Abel' );#2.单行子查询SELECTemployee_id,manager_id,department_idFROMemployeesWHERE(manager_id,depart......
  • mysql安装
    #tarxvfMySQL-5.6.28-1.linux_glibc2.5.x86_64.rpm-bundle.tarMySQL-embedded-5.6.28-1.linux_glibc2.5.x86_64.rpmMySQL-test-5.6.28-1.linux_glibc2.5.x86_64.rpmMySQL-shared-5.6.28-1.linux_glibc2.5.x86_64.rpmMySQL-server-5.6.28-1.linux_glibc2.5.x86_64.rpmMy......