mysql数据库关键字及用法_mysql唯一索引关键字

mysql数据库关键字及用法_mysql唯一索引关键字利用mysqlexplain来对sql语句进行优化,你需要懂这些关键字各表示的含义,这样优化才有的放矢。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

利用mysql explain来对sql语句进行优化,你需要懂这些关键字各表示的含义,这样优化才有的放矢。

语法格式如下:

EXPLAIN SELECT SQL

语法格式说明:

EXPLAIN:分析查询语句的关键字。

SELECT:执行查询语句的关键字。

SQL:查询语句。

mysql数据库关键字及用法_mysql唯一索引关键字

接下来对输出结果进行简单的解释。

(1)id:表示SELECT语句的序列号,有多少个SELECT语句就有多少个序列号。如果当前行的结果数据中引用了其他行的结果数据,则该值为NULL。

(2)select_type:查询类型,表示当前SQL语句是简单查询还是复杂查询。常见取值如下: 

SIMPLE:简单查询,不包含任何连接查询和子查询。

PRIMARY:主查询或者包含子查询时最外层的查询语句。

UNION:当前SQL语句是连接查询时,表示连接查询的第二个SELECT语句或者第二个后面的SELECT语句。

DEPENDENT UNION:含义与UNION几乎相同,但是DEPENDENT UNION取决于外层的查询语句。

UNION RESULT:表示连接查询的结果信息。

SUBQUERY:表示子查询中的第一个查询语句。

DEPENDENT SUBQUERY:含义与SUBQUERY几乎相同,但是DEPENDENTSUBQUERY取决于外层的查询语句。

DERIVED:表示FROM子句中的子查询。

MATERIALIZED:表示实例化子查询。

UNCACHEABLE SUBQUERY:表示不缓存子查询的结果数据,重新计算外部查询的每一行数据。

UNCACHEABLE UNION:表示不缓存连接查询的结果数据,每次执行连接查询时都会重新计算数据结果。

(3)table:当前查询(连接查询、子查询)所在的数据表。

(4)partitions:如果当前数据表是分区表,则表示查询结果匹配的分区。

(5)type:当前SQL语句所使用的关联类型或者访问类型,

其取值从最优到最差依次为

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge> unique_subquery > index_subquery > range > index > ALL

system:查询的数据表中只有一行数据,是const类型的特例。

const:数据表中最多只有一行数据符合查询条件,当查询或连接的字段为主键或唯一索引时,则type的取值为const。简单示例如下:

mysql数据库关键字及用法_mysql唯一索引关键字

mysql数据库关键字及用法_mysql唯一索引关键字

eq_ref:如果查询语句中的连接条件或查询条件使用了主键或者非空唯一索引包含的全部字段,则type的取值为eq_ref,典型的场景为使用“=”操作符比较带索引的列。

ref:当查询语句中的连接条件或者查询条件使用的索引不是主键和非空唯一索引,或者只是一个索引的一部分,则type的取值为ref,典型的场景为使用“=”带索引的列。简单示例如下:

 mysql数据库关键字及用法_mysql唯一索引关键字

 此时,product_order_operate表orderNum字段上添加有普通索引

fulltext:当查询条件使用了全文索引时,type的取值为fulltext。

ref_or_null:类似于ref,但是当查询语句的连接条件或者查询条件包含的列有NULL值时,MySQL会进行额外查询,经常被用于解析子查询。简单示例如下:

mysql数据库关键字及用法_mysql唯一索引关键字

 index_merge:当查询语句使用索引合并优化时,type的取值为index_merge。此时,key列会显示使用到的所有索引,key_len显示使用到的索引的最长键长值。简单示例如下:

mysql数据库关键字及用法_mysql唯一索引关键字

 此时,orderNum字段上添加有唯一索引。

unique_subquery:当查询语句的查询条件为IN的语句,并且IN语句中的查询字段为数据表的主键或者非空唯一索引字段时,type的取值为unique_subquery。

index_subquery:与unique_subquery类似,但是IN语句中的查询字段为数据表中的非唯一索引字段。

range:当查询语句的查询条件为某个范围的记录时,type的取值为range。key列会显示使用的索引,key_len显示使用索引的最长键长值。典型的场景为使用=、<>、>、>=、<、<=、IS [NOT] NULL、<=>、BETWEEN AND或者IN操作符时,用常量比较关键字的列。简单示例如下:

mysql数据库关键字及用法_mysql唯一索引关键字

 index:当查询语句中的查询条件使用的是覆盖索引,也就是说查询条件中的字段包含索引中的全部字段,并且按照索引中字段的顺序进行条件匹配,此时只需要扫描索引树即可。另外,当查询语句的条件只是按照索引顺序查找数据行时,也只需要扫描索引树即可。简单示例如下:

mysql数据库关键字及用法_mysql唯一索引关键字

 ALL:每次进行连接查询时,都会进行完整的表扫描。查询性能最差,需要添加索引来避免此类型的查询。简单示例如下:

mysql数据库关键字及用法_mysql唯一索引关键字

 (6)possible_keys:执行查询语句时可能用到的索引,但是在实际查询中未必会用到。当此列为NULL时,说明没有可使用的索引,此时可以通过建立索引来提高查询的性能。

(7)key:执行查询语句时MySQL实际会使用到的索引。如果MySQL实际没有使用索引,则此列为NULL。

(8)key_len:执行查询语句时实际用到的索引按照字节计算的长度值,可以通过此字段计算MySQL实际上使用了复合索引中的多少字段。如果key列值为NULL,则key_len列值也为NULL。

(9)ref:数据表中的哪个列或者哪个常量用来和key列中的索引做比较来检索数据。如果此列的值为func,则说明使用了某些函数的结果数据与key列中的索引做比较来检索数据。

(10)rows:查询数据时必须查找的数据行数,当数据表的存储引擎为InnoDB时,值为MySQL的预估值。

(11)Extra:在执行查询语句时额外的详细信息。EXPLAIN语句支持使用JSON格式输出结果信息,例如:

mysql数据库关键字及用法_mysql唯一索引关键字

using filesort(性能非常差):说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。mysql中无法利用索引完成的排序称为文件排序。

using temporary(性能非常差):新建了内部临时表,使用了临时表保存中间结果。常见于order by、group by,所以分组和排序一定要按照锁建立的索引的名字和顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180996.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 5G物理信道和物理信号定义

    5G物理信道和物理信号定义一、上行链路物理信道包含以下信道:1、物理上行链路共享信道PUSCH2、物理上行控制共享信道PUCCH3、物理随机接入信道PRACH其中PUSCH支持的调制方案有:pai/2-BPSKQPSK16QAM64QAM256QAM物理上行链路控制信道支持多种格式:fomat0OFDM符号长度1-2fomat1OFDM符号长度4-14fomat2OFDM符号…

    2022年5月12日
  • C#开发面试题_程序员面试题精选100题

    C#开发面试题_程序员面试题精选100题注明:经过本人面试的经历和在网上的资料整理出来的100道比较常见的C#面试题,想当初面试公司虽然不是很多,第一次找工作用了近两周的时间面试了二十多家公司,成功的不到十家,最后选择了一家大型的软件公司干了两个月就走人了。后来又找了一周工作,面试了十一家公司,成功9家。现在已经在公司工作了快两年的时间了。以下的面试题也是自己曾经做过的,希望能帮助更多的同行找到满意的工作!!!1..NET和C#有

    2022年8月25日
  • 管理学第三章_企业集团管理第五章自测

    管理学第三章_企业集团管理第五章自测文章目录主要内容项目范围6个过程范围管理的重要性总表5.1范围管理概述5.2规划范围管理5.3收集需求主要内容项目范围6个过程(1)规划范围管理:对如何定义、确认和控制项目范围的过程进行描述。(2)收集需求:为实现项目目标,明确并记录项目干系人的相关需求的过程。(3)定义范围:详细描述产品范围和项目范围,编制项目范围说明书,作为以后项目决策的基础。(4)刨建工作分解结构(WBS):把整个项目工作分解为较小的、易于管理的组成部分,形成一个自上而下的分解结构。(5)确认范围:正式验收已完成的可交付

    2022年9月22日
  • ubuntu外接显示器无信号_ubuntu笔记本外接显示器

    ubuntu外接显示器无信号_ubuntu笔记本外接显示器Overview 主机配置 启用远程控制 安装软件和支持 其它 注意事项 Reference 主机配置系统:Ubuntu18.04 显卡:Intel集成显卡启用远程控制首先要确保开机能够自动启动远程控制。Ubuntu18自带远程桌面控制服务软件;这里不具体写步骤,自行上网搜索。确保上述远程桌面控制能够开机自启动!!!确保上述远程桌面控制能够开机自启动!!!确保上述远程桌面控制能够开机自启动!!!Ubuntu18自带的远程桌面控制

    2022年8月21日
  • perl正则表达式匹配中文

    perl正则表达式匹配中文perl正则表达式匹配中文:/[^u4E00-u9FA5]/js中正则表达式匹配中文:match(/[\u4E00-\u9FA5]/)

    2022年5月31日
  • js中settimeout()的用法详解_低噪放工作原理

    js中settimeout()的用法详解_低噪放工作原理基本原理setTimeout(func,delay,args):设置超时调用,经过delay时间后,将func函数加入到执行队列中准备调用。如果队列为空,立即执行该函数,否则等待线程空闲再执行。setInterval(func,interval,args):设置…

    2022年10月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号