1010cc时时彩标准版 > 1010cc三分网站 > 【1010cc时时彩标准版】详细介绍,mysql查询优化相

原标题:【1010cc时时彩标准版】详细介绍,mysql查询优化相

浏览次数:117 时间:2019-11-10

Extra

Extra是EXPLAIN输出中其余二个超重视的列,该列彰显MySQL在查询进程中的一些详细音讯,MySQL查询优化器试行查询的进度中对查询布置的第生机勃勃补充新闻。

类型 说明
Using filesort MySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using filesort 说明MySQL使用了后者,但注意虽然叫filesort但并不是说明就是用了文件来进行排序,只要可能排序都是在内存里完成的。大部分情况下利用索引排序更快,所以一般这时也要考虑优化查询了。使用文件完成排序操作,这是可能是ordery by,group by语句的结果,这可能是一个CPU密集型的过程,可以通过选择合适的索引来改进性能,用索引来为查询结果排序。
Using temporary 用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。
Not exists MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
Using index 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。
Using where 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
Using join buffer 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
impossible where where子句的值总是false,不能用来获取任何元组
select tables optimized away 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

作者:高广超
链接:
來源:简书
版权表达:内容来自网络,版权归原创者全体。除非不可能确认,大家都会标注作者及出处,如有侵害权益烦请告知,大家会立即删除并表示歉意。多谢。

 

作者积存多年的干货文书档案无需付费赠与,满含前端后端和测验,系统架构,高并发管理,优化等

1010cc时时彩标准版 1

 

相关文章:

MySQL高性能表设计规范:http://www.jianshu.com/p/f797bbe11d76
MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45
MySQL 锁机制 常用知识点:http://www.jianshu.com/p/0d5b7cd592f9

(7). unique_subquery

 使用EXPLAIN语句检查优化器操作 ---- ------------- ---------- ------- --------------- ------ --------- ------ ------ ----------------- | id | select_type | table | type | possible_keys | key | key_len| ref | rows | Extra ---- ------------- ---------- ------- --------------- ------ --------- ------ ------ ----------------- | 1 |SIMPLE | car_info | range | name | name | 768 | NULL | 9 | Using where; Using index | ---- ------------- ---------- ------- --------------- ------ --------- ------ ------ ----------------
EXPLAIN输出解释
select_type 犹如下几类别型: SIMPLE:未选拔连接查询大概子查询的简易select语句 explain select * from car_info;
PEvoqueIMALANDY:最外层的select语句 explain select * from (select name from car_info where name like '凯迪拉克%') as a;
---- ------------- ------------ ------- --------------- ------ --------- ------ ------ -------------
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---- ------------- ------------ ------- --------------- ------ --------- ------ ------ ---------------
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 9 | |
| 2 | DERIVED | car_info | range | name | name | 768 | NULL | 9 | Using where; Using index |
---- ------------- ------------ ------- --------------- ------ --------- ------ ------ ---------------
UNION:union中的第一个,或前边的select语句 explain select name from car_info where id =100 union select name from web_car_brands where id =5; ------ -------------- ---------------- ------- --------------- --------- --------- ------- ------ -- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ------ -------------- ---------------- ------- --------------- --------- --------- ------- ------ --- | 1 | PRIMARY | car_info | const | PRIMARY | PRIMARY | 8 | const | 1 | | | 2 | UNION | web_car_brands | const | PRIMARY,id | PRIMARY | 4 | const | 1 | | | NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | | ------ -------------- ---------------- ------- --------------- --------- --------- ------- ------ ---

MySQL EXPLAIN命令是询问品质优化不可缺点和失误的一片段,该文首要解说explain命令的接收及相关参数表明。

 

该类型替换了上边情势的IN子查询的ref:

UNION RESULT:union的结果 explain select name from car_info where id =100 union select name from web_car_brands where id =5; ------ -------------- ---------------- ------- --------------- --------- --------- ------- ------ ----- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ------ -------------- ---------------- ------- --------------- --------- --------- ------- ------ -- | 1 | PRIMARY | car_info | const | PRIMARY | PRIMARY | 8 | const | 1 | | | 2 | UNION | web_car_brands | const | PRIMARY,id | PRIMARY | 4 | const | 1 | | | NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | | ------ -------------- ---------------- ------- --------------- --------- --------- ------- ------ ----
SUBQUE奥迪Q7Y:子查询中的第四个SELECT语句 explain select name from car_info where id = (select id from web_car_series where id = 5); ---- ------------- ---------------- ------- --------------- --------- --------- ------- ------ ----- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ---- ------------- ---------------- ------- --------------- --------- --------- ------- ------ ------ | 1 | PRIMARY | car_info | const | PRIMARY | PRIMARY | 8 | const | 1 | | | 2 | SUBQUERY | web_car_series | const | PRIMARY | PRIMARY | 4 | | 1 | Using index | ---- ------------- ---------------- ------- --------------- --------- --------- ------- ------ -----

key

key列展现MySQL实际调节利用的键(索引卡塔 尔(英语:State of Qatar)。若无接收索引,键是NULL。要想强制MySQL使用或不经意possible_keys列中的索引,在查询中动用FORCE INDEX、USE INDEX可能IGNORE INDEX。

index: Full Index Scan,index与ALL不相同为index类型只遍历索引树

  1. select_type

DEPENDENT SUBQUERubiconY:子查询中的第一个SELECT,决意于外面包车型客车询问
explain select name from car_info where id in (select id from web_car_series where id = 5); ---- -------------------- ---------------- ------- --------------- --------- --------- ------- ------ - | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ---- -------------------- ---------------- ------- --------------- --------- --------- ------- ------ | 1 | PRIMARY | car_info | index | NULL | name | 768 | NULL | 145 | Using where; Using index | | 2 | DEPENDENT SUBQUERY | web_car_series | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index | ---- -------------------- ---------------- ------- --------------- --------- --------- ------- -----

possible_keys

来得查询利用了怎样索引,表示该索引能够开展快速地搜寻,但是列出来的目录对于持续优化进度也许是从未用的

MySQL EXPLAIN命令是查询品质优化不可缺点和失误的黄金时代有的,该文首要批注explain命令的使用及相关参数表明。

例如: explain select * from t3 where id=3952602;

若果该列是NULL,则从未有关的目录。在此种气象下,能够透过检查WHERE子句看是还是不是它援用有个别列或相符索引的列来提升你的查询品质。若是是这么,创设一个特别的目录何况再度用EXPLAIN检查查询
key列 key列呈现MySQL实际决定接受的键(索引)。要想强制MySQL使用或不经意possible_keys列中的索引,在查询中利用FORCE INDEX、USE INDEX大概IGNORE INDEX。
key_len列 key_len列显示MySQL决定动用的键长度。使用的目录的长短,在不损失正确性的地方下,长度越短越好
rows列 rows列呈现MySQL以为它奉行查询时必需检查的行数
 mysql相关优化技艺
尽只怕使用数据类型相仿的多少列举行相比较
使带索引的数据列在可比表明式中独立现身
并不是在like情势的上马地点运用通配符,那时目录无效
用尽了全力利用数值操作,少使用字符串操作
数据类型合理选择,尽量"小",接收适用于累积引擎的多少格式
尽量将数据列证明为NOT NULL ,因为MYSQL没有必要在查询管理时期检查数据列值是不是为NULL
寻思接纳ENUM数据列,ENUM在MYSQL内部被代表为一名目繁多数值,管理速度快
选取Procedure analyse()语句 该语句能够将数据列中能够运用ENUM情势字段列出,procedure analyse(16,256)语句表示数据列中不相同取值超越15个的要么长度超过257个字节的,不建议ENUM类型的提出
对轻便生出碎片化的数据表实行收拾,对于可变长度的数据列,随着数据的豁达修改可能去除极易发生碎片,由此需求依期optimize table
尽量防止对BLOB或TEXT值进行索引

id

id是用来挨门挨户标志整个查询中SELELCT 语句的,在嵌套查询中id越大的说话越先施行。该值恐怕为NULL,假若这风姿洒脱行用来注脚的是别的行的一同结果。

key_len

key_len列突显MySQL决定利用的键长度。假若键是NULL,则长度为NULL。使用的目录的长度。在不损失正确性的情事下,长度越短越好 。

---- ------------- ------------ -------- ------------------- --------- --------- ------ ------ -------
| id | select_type | table      | type   | possible_keys     | key     | key_len | ref  | rows | Extra |
---- ------------- ------------ -------- ------------------- --------- --------- ------ ------ -------
|  1 | PRIMARY     | <derived2> | system | NULL              | NULL    | NULL    | NULL |    1 |       |
|  2 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4       |      |    1 |       |
---- ------------- ------------ -------- ------------------- --------- --------- ------ ------ -------

---- ------------- ---------- ------- --------------- ------ --------- ------ ------ ----------------- | id | select_type | table | type |...

type

type突显的是寻访类型,是相当的主要的叁个目标,结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,经常的话,得保证查询起码达到range等级,最CANON落得ref。

类型 说明
All 最坏的情况,全表扫描
index 和全表扫描一样。只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。如在Extra列看到Using index,说明正在使用覆盖索引,只扫描索引的数据,它比按索引次序全表扫描的开销要小很多
range 范围扫描,一个有限制的索引扫描。key 列显示使用了哪个索引。当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可以使用 range
ref 一种索引访问,它返回所有匹配某个单个值的行。此类索引访问只有当使用非唯一性索引或唯一性索引非唯一性前缀时才会发生。这个类型跟eq_ref不同的是,它用在关联操作只使用了索引的最左前缀,或者索引不是UNIQUE和PRIMARY KEY。ref可以用于使用=或<=>操作符的带索引的列。
eq_ref 最多只返回一条符合条件的记录。使用唯一性索引或主键查找时会发生 (高效)
const 当确定最多只会有一行匹配的时候,MySQL优化器会在查询前读取它而且只读取一次,因此非常快。当主键放入where子句时,mysql把这个查询转为一个常量(高效)
system 这是const连接类型的一种特例,表仅有一行满足条件。
Null 意味说mysql能在优化阶段分解查询语句,在执行阶段甚至用不到访问表或索引(高效)

EXPLAIN Output Columns

Column 含义 Meaning
id query中select的序列号 The SELECT identifier
select_type select 类型 The SELECT type
table 输出的行所引用的表 The table for the output row
partitions   The matching partitions
type 联接类型 The join type
possible_keys 可以使用的索引 The possible indexes to choose
key 决定使用到的索引 The index actually chosen
key_len 使用到的的索引长度 The length of the chosen key
ref   The columns compared to the index
rows 扫描的行数 Estimate of rows to be examined
filtered   Percentage of rows filtered by table condition
Extra 查询的额外信息 Additional information

(11). ALL

DEEnclaveIVED:在from列表中包括子查询,mysql会递归的实践该子查询,并把结果放在有的时候表中
explain select * from (select name from car_info where id = 100) a; ---- ------------- ------------ -------- --------------- --------- --------- ------ ------ - | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ---- ------------- ------------ -------- --------------- --------- --------- ------ ------ - | 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | | | 2 | DERIVED | car_info | const | PRIMARY | PRIMARY | 8 | | 1 | | ---- ------------- ------------ -------- --------------- --------- --------- ------ ------ -
type列: MySQL 在表里找到所需行的艺术包蕴如下几张(由左至右,由最差到最棒): All-->index-->range-->ref -->eq_ref-->const,system -->null
ALL:举行全体据表扫描 index:依照索引的次第扫描表,先读索引,然后读取具体的数额行,其实依然全表扫描,好处在于不用排序,依据索引的大器晚成大器晚成range:依照某些范围读取数据行 ref:非唯风度翩翩性索引访问eq_ref:使用唯黄金年代性索引访谈(主键只怕唯风华正茂性索引) const:最三只有三个相称行,const常用于数值相比如 primary key
null:在优化进程中曾经得到结果,没有必要访谈表只怕索引 如:explain select min(id) from car_info;
possible_keys列: possible_keys列提议MySQL能采用哪个索引在该表中找到行。注意,该列完全部独用立于EXPLAIN输出所示的表的程序。那象征在possible_keys中的有个别键实际上不能够按生成的表次序使用。

EXPLAIN Output Columns

列名 说明
id 执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。否则,内层的select语句一般会顺序编号,对应于其在原始语句中的位置
select_type 显示本行是简单或复杂select。如果查询有任何复杂的子查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUlT)
table 访问引用哪个表(引用某个查询,如“derived3”)
type 数据访问/读取操作类型(ALL、index、range、ref、eq_ref、const/system、NULL)
possible_keys 揭示哪一些索引可能有利于高效的查找
key 显示mysql决定采用哪个索引来优化查询
key_len 显示mysql在索引里使用的字节数
ref 显示了之前的表在key列记录的索引中查找值所用的列或常量
rows 为了找到所需的行而需要读取的行数,估算值,不精确。通过把所有rows列值相乘,可粗略估算整个查询会检查的行数
Extra 额外信息,如using index、filesort等

ref

ref列突显采纳哪个列或常数与key一齐从表中挑选行。

(1).Distinct

DEPENDENT UNION:union中的第一个或后边的色了人生观语句,决意于外面包车型客车查询
mysql> explain select * from t3 where id in (select id from t3 where id=3952602 union all select id from t3) ;
---- -------------------- ------------ -------- ------------------- --------- --------- ------- ------ ------
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---- -------------------- ------------ -------- ------------------- --------- --------- ------- ------ --
| 1 | PRIMARY | t3 | ALL | NULL | NULL | NULL | NULL | 1000 | Using where
| 2 | DEPENDENT SUBQUERY | t3 | const | PRIMARY,idx_t3_id | PRIMARY | 4 | const | 1 | Using index |
| 3 | DEPENDENT UNION | t3 | eq_ref | PRIMARY,idx_t3_id | PRIMARY | 4 | func | 1 | Using where; Using index |
|NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | |
---- -------------------- ------------ -------- ------------------- --------- --------- ------- ------ -

rows

rows列展现MySQL以为它实施查询时必得检查的行数。注意那是多个预价值评估。

EXPLAIN 语法

  1. {EXPLAIN | DESCRIBE | DESC}
  2. tbl_name [col_name | wild]
  3. ``
  4. {EXPLAIN | DESCRIBE | DESC}
  5. [explain_type]
  6. {explainable_stmt | FOR CONNECTION connection_id}
  7. ``
  8. explain_type: {
  9. EXTENDED
  10. | PARTITIONS
  11. | FORMAT = format_name
  12. }
  13. ``
  14. format_name: {
  15. TRADITIONAL
  16. | JSON
  17. }
  18. ``
  19. explainable_stmt: {
  20. SELECT statement
  21. | DELETE statement
  22. | INSERT statement
  23. | REPLACE statement
  24. | UPDATE statement
  25. }

例如:

key_len

key_len列呈现MySQL决定动用的键长度。假设键是NULL,则长度为NULL。使用的目录的长短。在不损失正确性的情况下,长度越短越好 。

possible_keys

列出能够使用什么索引来查询,最后会选择八个最优的。如若该列为NULL,则意味从未相关的目录。

  1. rows

ref

ref列呈现采纳哪个列或常数与key一同从表中采用行。

参谋资料:

一言以蔽之SELECT(不利用UNION或子查询等) 比方:

table

对应行正在访谈哪叁个表,表名大概外号

  • 涉及优化器会为查询选用事关顺序,侧边深度优先
  • 当from中有子查询的时候,表名是derivedN的款型,N指向子查询,也等于explain结果中的下一列
  • 当有union result的时候,表名是union 1,2等的款型,1,2意味着涉足union的query id

瞩目:MySQL对待那一个表和普通表同样,但是这几个“不时表”是绝非任何索引的。

六、Key

---- ------------- ------- ------- ------------------- --------- --------- ------- ------ -------------
| id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra       |
---- ------------- ------- ------- ------------------- --------- --------- ------- ------ -------------
|  1 | PRIMARY     | t3    | const | PRIMARY,idx_t3_id | PRIMARY | 4       | const |    1 |             |
|  2 | SUBQUERY    | t3    | const | PRIMARY,idx_t3_id | PRIMARY | 4       |       |    1 | Using index |
---- ------------- ------- ------- ------------------- --------- --------- ------- ------ -------------

select_type

代表查询的项目

类型 说明
simple 简单子查询,不包含子查询和union
primary 包含union或者子查询,最外层的部分标记为primary
subquery 一般子查询中的子查询被标记为subquery,也就是位于select列表中的查询
derived 派生表——该临时表是从子查询派生出来的,位于form中的子查询
union 位于union中第二个及其以后的子查询被标记为union,第一个就被标记为primary如果是union位于from中则标记为derived
union result 用来从匿名临时表里检索结果的select被标记为union result
dependent union 顾名思义,首先需要满足UNION的条件,及UNION中第二个以及后面的SELECT语句,同时该语句依赖外部的查询
subquery 子查询中第一个SELECT语句
dependent subquery 和DEPENDENT UNION相对UNION一样

原文:

当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN恐怕IN操作符,用常量相当的重大字列时,能够使用range

                

ref列展现选择哪个列或常数与key一同从表中甄选行。

三、table

mysql> explain select * from t3 where id=3952602 or id=3952603 ;

key_len

列出利用索引的长度,通过使用的目录长度能够臆度出联合索引中哪多少个字段使用到了目录,举例:

  1. mysql> explain select * from index_test where a='abc' and b='abc' and c>'abc';
  2. ---- ------------- ------------ ------------ ------- --------------------- ------------- --------- ------ ------ ---------- -----------------------
  3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
  4. ---- ------------- ------------ ------------ ------- --------------------- ------------- --------- ------ ------ ---------- -----------------------
  5. | 1 | SIMPLE | index_test | NULL | range | Index_a_b_c,index_b | Index_a_b_c | 588 | NULL | 1 | 100.00 | Using index condition |
  6. ---- ------------- ------------ ------------ ------- --------------------- ------------- --------- ------ ------ ---------- -----------------------
  7. 1 row in set, 1 warning (0.00 sec)
  8. ``
  9. mysql> explain select * from index_test where a='abc' and b>'abc' and c='abc';
  10. ---- ------------- ------------ ------------ ------- --------------------- ------------- --------- ------ ------ ---------- -----------------------
  11. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
  12. ---- ------------- ------------ ------------ ------- --------------------- ------------- --------- ------ ------ ---------- -----------------------
  13. | 1 | SIMPLE | index_test | NULL | range | Index_a_b_c,index_b | Index_a_b_c | 390 | NULL | 1 | 16.67 | Using index condition |
  14. ---- ------------- ------------ ------------ ------- --------------------- ------------- --------- ------ ------ ---------- -----------------------

  小编的接头是SQL推行的得手的标志,SQL从大到小的推行.

表示索引中使用的字节数,可经过该列总括查询中应用的目录的长短(key_len展现的值为索引字段的最大大概长度,并不是实际行使长度,即key_len是基于表定义总括而得,不是经过表内检索出的卡塔 尔(英语:State of Qatar)

即使该列是NULL,则还未相关的目录。在此种景观下,可以因此检查WHERE子句看是或不是它援引有些列或契合索引的列来进步你的询问品质。如果是这么,创立叁个合适的目录而且再度用EXPLAIN检查查询

     小编的明白是SQL推行的逐一的标记,SQL从大到小的实施

在上边包车型客车例证中,MySQL能够接纳ref联接来管理ref_tables:

Using join buffer:改值重申了在获得连接条件时不曾使用索引,而且必要延续缓冲区来储存中间结果。若是现身了那些值,那应该专一,依照查询的具体处境大概须求加多索引来修改能。

const用于用常数值比较PCR-VIMA昂CoraY KEY或UNIQUE索引的享有片段时。在上边包车型大巴询问中,tbl_name能够用来const表:

四、type

mysql> explain select * from (select * from t3 where id=3952602) a ;

ref

Record(index map:#)

(6) SUBQUEEscortY(子查询中的第一个SELECT)

你恐怕感兴趣的篇章:

  • 精解MySQL中EXPLAIN解释命令及用法解说
  • Mysql中explain作用安详严整
  • 浅谈mysql explain中key_len的简政放权办法
  • mysql优化利器之explain使用介绍
  • mysql explain的用法(使用explain优化查询语句)
  • 简述Mysql Explain 命令
  • MySQL中EXPLAIN命令详细解释
  • MySQL查询优化之explain的深深深入分析
  • mysql中explain用法详整
  • Mysql之EXPLAIN显示using filesort介绍
  • mysql总结之explain
  • MySQL质量剖判及explain的施用验证
  • MYSQL explain 实践安排
  • mysql之explain使用安详严整(剖析索引)

 

(5).SUBQUERY

这次试验应用到的表结构

  1. Welcome to the MySQL monitor. Commands end with ; or g.
  2. Your MySQL connection id is 12
  3. Server version: 5.7.10 Homebrew
  4. ``
  5. mysql> show tables;
  6. ----------------------
  7. | Tables_in_index_test |
  8. ----------------------
  9. | index_one |
  10. | index_relation |
  11. | index_test |
  12. ----------------------
  13. 3 rows in set (0.00 sec)
  • index_one表
    1. mysql> show create table index_one;
    2. ----------- -----------------------------------------------------------------------------------------------------------------------------------------------
    3. | Table | Create Table |
    4. ----------- -----------------------------------------------------------------------------------------------------------------------------------------------
    5. | index_one | CREATE TABLE `index_one` (
    6. `id` int(11) NOT NULL AUTO_INCREMENT,
    7. PRIMARY KEY (`id`)
    8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |
    9. ----------- -----------------------------------------------------------------------------------------------------------------------------------------------
    10. 1 row in set (0.00 sec)
  • index_relation 关系表
    1. mysql> show create table index_relation;
    2. ---------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    3. | Table | Create Table |
    4. ---------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    5. | index_relation | CREATE TABLE `index_relation` (
    6. `id` int(11) NOT NULL AUTO_INCREMENT,
    7. `aid` int(11) DEFAULT NULL,
    8. PRIMARY KEY (`id`),
    9. KEY `index_aid` (`aid`)
    10. ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 |
    11. ---------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    12. 1 row in set (0.00 sec)
  • index_test 表
    1. mysql> show create table index_test;
    2. ------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    3. | Table | Create Table |
    4. ------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    5. | index_test | CREATE TABLE `index_test` (
    6. `id` int(11) NOT NULL AUTO_INCREMENT,
    7. `a` varchar(64) DEFAULT NULL,
    8. `b` varchar(64) DEFAULT NULL,
    9. `c` varchar(65) DEFAULT NULL,
    10. `e` varchar(64) DEFAULT NULL,
    11. PRIMARY KEY (`id`),
    12. KEY `Index_a_b_c` (`a`,`b`,`c`),
    13. KEY `index_b` (`b`)
    14. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 |
    15. ------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    16. 1 row in set (0.00 sec)

rows列展现MySQL认为它实施查询时必得检查的行数。

该列包蕴MySQL化解查询的详细新闻,有以下两种景况:

possible_keys列建议MySQL能使用哪个索引在该表中找到行。注意,该列完全部独用立于EXPLAIN输出所示的表的顺序。那表示在possible_keys中的有些键实际上不能够按生成的表次序使用。

 代表MySQL依据表总计信息及索引选择情形,推断的找到所需的笔录所急需读取的行数

MYSQL优化了LEFT JOIN,一旦它找到了相配LEFT JOIN标准的行,

在平凡专门的学业中,我们会临时会开慢查询去记录一些举办时间比较久的SQL语句,搜索这个SQL语句并不代表完事了,些时大家常常用到explain这么些命令来查看叁个那一个SQL语句的实行安插,查看该SQL语句有未有应用上了目录,有未有做全表扫描,这都能够通过explain命令来查阅。所以大家深深通晓MySQL的依靠费用的优化器,仍然为能够赢得大多只怕被优化器考虑到的拜候攻略的底细,以至当运维SQL语句时哪个种类政策估计会被优化器选取。(QEP:sql生成二个实行陈设query Execution plan卡塔 尔(阿拉伯语:قطر‎

---- ------------- ------------ -------- ------------------- --------- --------- ------ ------ -------
| id | select_type | table      | type   | possible_keys     | key     | key_len | ref  | rows | Extra |
---- ------------- ------------ -------- ------------------- --------- --------- ------ ------ -------
|  1 | PRIMARY     | <derived2> | system | NULL              | NULL    | NULL    | NULL |    1 |       |
|  2 | DERIVED     | t3         | const  | PRIMARY,idx_t3_id | PRIMARY | 4       |      |    1 |       |
---- ------------- ------------ -------- ------------------- --------- --------- ------ ------ -------

1010cc时时彩标准版 2

(4).Using filesort

3.id万意气风产生龙活虎致,能够感觉是风流洒脱组,从上往下风流罗曼蒂克生龙活虎实践;在全体组中,id值越大,优先级越高,越先推行

(1) SIMPLE

五、possible_keys

行使了WHERE从句来节制哪些行将与下一张表相称也许是回到给客户。假如不想回到表中的全体行,况且接二连三类型ALL或index,那就能够发生,或然是询问反常

EXPLAIN 介绍

(8).index_subquery

Extra

Extra是EXPLAIN输出中其余三个很要紧的列,该列展现MySQL在询问进度中的一些详细音讯,MySQL查询优化器试行查询的历程中对查询陈设的严重性补充音讯。

类型 说明
Using filesort MySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using filesort 说明MySQL使用了后者,但注意虽然叫filesort但并不是说明就是用了文件来进行排序,只要可能排序都是在内存里完成的。大部分情况下利用索引排序更快,所以一般这时也要考虑优化查询了。使用文件完成排序操作,这是可能是ordery by,group by语句的结果,这可能是一个CPU密集型的过程,可以通过选择合适的索引来改进性能,用索引来为查询结果排序。
Using temporary 用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。
Not exists MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
Using index 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。
Using where 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
Using join buffer 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
impossible where where子句的值总是false,不能用来获取任何元组
select tables optimized away 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

因为一向对MySQL中explain的归来结果夏虫语冰,所以今日花时间研究下,写成博客分享给我们;内容根本参照MySQL的官方手册,还应该有互联网的有个别文章。

因为Mysq差别版本对查询优化不一致,所以不一致版本explain的结果大概不均等,本文基于MySQL 5.7 版本,参照他事他说加以考察MySQL 5.7 官方手册,手册是英语的,自身德语水平不佳。。。翻译有出入的地点我们多多提意见。

mysql> explain select * from t3 where id = (select id from t3 where id=3952602 )  ;

九、rows

(6). index_merge

id

id是用来挨门逐户标志整个查询中SELELCT 语句的,在嵌套查询中id越大的讲话越先实施。该值可能为NULL,借使这朝气蓬勃行用来证实的是别的行的同盟结果。

UNION中的第三个或前面包车型地铁SELECT语句.举个例子

1010cc时时彩标准版 3

例如

 

1010cc时时彩标准版,(10).index

select_type

能够精晓为select查询类型,对于索引优化未有首要的含义,简要介绍一下,有以下结果:

Value 含义 Meaning
SIMPLE 简单的查询(没有使用Union 或 子查询) Simple SELECT (not using UNION or subqueries)
PRIMARY 最外层的查询 Outermost SELECT
UNION Union查询中的地二个,或第三、第四... Second or later SELECT statement in a UNION
DEPENDENT UNION Union的结果被外层查询依赖 Second or later SELECT statement in a UNION, dependent on outer query
UNION RESULT 合并结果 Result of a UNION.
SUBQUERY 子查询 First SELECT in subquery
DEPENDENT SUBQUERY 子查询的结果被外层查询依赖 First SELECT in subquery, dependent on outer query
DERIVED   Derived table SELECT (subquery in FROM clause)
MATERIALIZED   Materialized subquery
UNCACHEABLE SUBQUERY   A subquery for which the result cannot be cached and must be re-evaluated for each row of the outer query
UNCACHEABLE UNION   The second or later select in a UNION that belongs to an uncacheable subquery (see UNCACHEABLE SUBQUERY)
  • SIMPLE 轻巧的查询,未有利用Union或子查询,比方:
    1. mysql> explain select * from index_test where id=1;
    2. ---- ------------- ------------ ------------ ------- --------------- --------- --------- ------- ------ ---------- -------
    3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    4. ---- ------------- ------------ ------------ ------- --------------- --------- --------- ------- ------ ---------- -------
    5. | 1 | SIMPLE | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    6. ---- ------------- ------------ ------------ ------- --------------- --------- --------- ------- ------ ---------- -------
  • PRIMARY Union查询中的最外层的询问,比方:

    1. mysql> explain select * from index_test where id=1 union select * from index_test where id=2;
    2. ---- -------------- ------------ ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
    3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    4. ---- -------------- ------------ ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
    5. | 1 | PRIMARY | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    6. | 2 | UNION | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    7. | NULL | UNION RESULT | <union1,2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary |
    8. ---- -------------- ------------ ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
  • UNION Union询问中的第一个或以往的查询,比方:

    1. mysql> explain select * from index_test where id=1 union select * from index_test where id=2 union select * from index_test where id=2;
    2. ---- -------------- -------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
    3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    4. ---- -------------- -------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
    5. | 1 | PRIMARY | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    6. | 2 | UNION | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    7. | 3 | UNION | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    8. | NULL | UNION RESULT | <union1,2,3> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary |
    9. ---- -------------- -------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
  • DEPENDENT UNION 相近于UNION,只是它的结果被外层查询正视,举个例子:

    1. mysql> explain select * from index_test where id in (select aid from index_relation where id=1 union select aid from index_relation where id=2);
    2. ---- -------------------- ---------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
    3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    4. ---- -------------------- ---------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
    5. | 1 | PRIMARY | index_test | NULL | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | Using where |
    6. | 2 | DEPENDENT SUBQUERY | index_relation | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    7. | 3 | DEPENDENT UNION | index_relation | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    8. | NULL | UNION RESULT | <union2,3> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary |
    9. ---- -------------------- ---------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -----------------
  • UNION RESULT 合併多行的结果,举个例子 UNION 中的例子。
  • SUBQUERY 子查询,例如:

    1. mysql> explain select * from index_test where id = (select aid from index_relation where id=(select 1));
    2. ---- ------------- ---------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -------
    3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    4. ---- ------------- ---------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -------
    5. | 1 | PRIMARY | index_test | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    6. | 2 | SUBQUERY | index_relation | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
    7. ---- ------------- ---------------- ------------ ------- --------------- --------- --------- ------- ------ ---------- -------
  • DEPENDENT SUBQUERY 不一致于SUBQUE途乐Y的是,查询结果被外层重视。例如DEPENDENT UNION中的例子。

  • DERIVED 子查询的结果作为外层查询的来源,比方:
    1. mysql> explain select * from (select 1) as a;
    2. ---- ------------- ------------ ------------ -------- --------------- ------ --------- ------ ------ ---------- ----------------
    3. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
    4. ---- ------------- ------------ ------------ -------- --------------- ------ --------- ------ ------ ---------- ----------------
    5. | 1 | PRIMARY | <derived2> | NULL | system | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
    6. | 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
    7. ---- ------------- ------------ ------------ -------- --------------- ------ --------- ------ ------ ---------- ----------------

1 row in set (0.00 sec)

本文由1010cc时时彩标准版发布于1010cc三分网站,转载请注明出处:【1010cc时时彩标准版】详细介绍,mysql查询优化相

关键词:

上一篇:1010cc时时彩标准版开荒进级篇种类,mysql配置甚至

下一篇:没有了