explain的语法ITeye - 凯发娱乐

explain的语法ITeye

2019-01-12 12:54:05 | 作者: 向松 | 标签: 查询,索引,类型 | 浏览: 1387

+—-+————-+——-+——-+——————-+———+———+——-+——+——-+
| id | select_type | table |type  |possible_keys  |key  | key_len |ref  | rows | Extra |
+—-+————-+——-+——-+——————-+———+———+——-+——+——-+

这些东西。

id:SELECT的辨认符,这是SELECT的查询序列号。

select_type:SELECT类型,有以下几种不同的类型
  (1).SIMPLE:简略的SELECT(不运用UNION或子查询)
  (2).PRIMARY:最外面的SELECT,假如咱们运用UNION或子查询,第一个查询将会是这个类型
  (3).UNION:运用UNION查询时,除第一个句子外的一切句子会回来这个类型
  (4).DEPENDENT UNION: UNION中的第二个或后边的SELECT句子,取决于外面的查询。
  (5).UNIONRESULT: UNION的成果。
  (6).SUBQUERY: 子查询中的第一个SELECT。
  (7).DEPENDENT SUBQUERY: 子查询中的第一个SELECT,取决于外面的查询。
  (8).DERIVED :衍生表会回来这个类型。如:select * from (select * from jos_content) as A;。

其间 table 表明是哪个表的数据。

type :表明表的衔接类型,功能由好到差的类型类型为
(System(表中仅有一行,即常量表),
const(单表中最多有一个匹配行),
eq_ref(关于前面的每一行,在此表中只查询一条记载),
ref(运用一般的索引),
ref_or_null(和ref相似,可是条件中包括关于NULL查询),
index_merge(索引兼并优化),
unique_subquery(in的后边是一个查询主键字段的子查询),
index_subquery(相似unique_subquery,主要是in的后边是查询非仅有索引字段的子查询),
range(单表中的规模查询),
index(关于当时的每一行,都经过查询索引来得到数据),
all(关于当时的每一行,都经过全表扫描来得到数据))

type比较重要。表明链接的类型。链接类型由好到坏的,依次是  system const eq_ref ref fulltext ref_or_null index_merge unique_subquery index_subquery range index ALL

一般状况,至少要到达 range 等级,最好是 ref等级。不然或许会有功能问题。

possible_keys 是指能够应用到该表的索引,假如为NULL则没有。

key 是指用到的索引。

key_len是索引的长度,在不影响查询精度的状况下,值越小越好 。

ref 是指索引的那一列被运用了。一般会是个常数。

rows MYSQL以为有必要查看的用来回来恳求数据的行数。

extra 是指额定的信息。也是比较重要的 。

但这儿能够看到的坏的比如是Using temporary和Usingfilesort,意思MYSQL底子不能运用索引,成果是检索会很慢

(1).Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再查找了
(2).Not exists
MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN规范的行, 就不再查找了
(3).Range checked for each
Record(index map:#)
没有找到抱负的索引,因而关于从前面表中来的每一个行组合,MYSQL查看运用哪个索引,并用它来从表中回来行。这是运用索引的最慢的衔接之一
(4).Using filesort
看到这个的时分,查询就需求优化了。MYSQL需求进行额定的过程来发现怎么对回来的行排序。它依据衔接类型以及存储排序键值和匹配条件的悉数行的行指针来排序悉数行
(5).Using index
列数据是从只是运用了索引中的信息而没有读取实践的举动的表回来的,这发作在对表的悉数的恳求列都是同一个索引的部分的时分
(6).Using temporary
看到这个的时分,查询需求优化了。这儿,MYSQL需求创立一个暂时表来存储成果,这一般发作在对不同的列集进行ORDERBY上,而不是GROUP BY上
(7).Using where
运用了WHERE从句来约束哪些行将与下一张表匹配或许是回来给用户。假如不想回来表中的悉数行,而且衔接类型ALL或index,这就会发作,或许是查询有问题
假如为 where used 阐明运用了where句子。假如 type为 all 或许 index,一般会呈现这样的成果。这样的问题,一般是查询需求改善。

在一般稍大的体系中,根本尽或许的削减join ,子查询等等。mysql就运用最简略的查询,这样功率最高。至于 join等,能够放在应用层去处理。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章