加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

人工智能正在走向错误的方向

发布时间:2021-02-11 18:15:01 所属栏目:传媒 来源:互联网
导读:四、查询优化处理 查询的生命周期的下一步是将一个SQL转换成一个执行计划,MySQL在依照这个执行计划和存储引擎进行交互。这包含多个子阶段:解析SQL、预处理、优化SQL执行计划。这个过程中任何错误都可能终止查询。 1. 语法解析器和预处理:首先MySQL通过关

四、查询优化处理

查询的生命周期的下一步是将一个SQL转换成一个执行计划,MySQL在依照这个执行计划和存储引擎进行交互。这包含多个子阶段:解析SQL、预处理、优化SQL执行计划。这个过程中任何错误都可能终止查询。

1. 语 法解析器和预处理: 首先MySQL通过关键字将SQL语句进行解析,并生成一颗对应的“解析树”。 MySQL解析器将使用mysql语法规则验证和解析查询; 预处理器则根据一些MySQL规则进一步检查解析数是否合法。

2. 查询优化器: 当语法树被认为是合法的了,并且由优化器将其转化成执行计划。 一条查询可以有很多种执行方式,最后都返回相同的结果。 优化器的作用就是找到这其中最好的执行计划。

3. 执行计划: MySQL不会生成查询字节码来执行查询,MySQL生成查询的一棵指令树,然后通过存储引擎执行完成这棵指令树并返回结果。 最终的执行计划包含了重构查询的全部信息。

五、查询执行引擎

在解析和优化阶段,MySQL将生成查询对应的执行计划,MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询。

六、返回结果给客户端

了解select * from tb_article where author_id=20 and title='b';性能和优化策略,一般采用explain命令进行分析。

MySQL explain

MySQL Query Optimizer通过执行explain命令来获取一个Query在当前状态的数据库中的执行计划。expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

下面对这些字段出现的可能进行解释:

1. id

id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。MySQL将 select 查询分为简单查询和复杂查询。复杂查询分为三类:简单子查询、派生表(from语句中的子查询)、union 查询。

2.select_type

(1) SIMPLE(简单SELECT,不使用UNION或子查询等);

(2) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY);

(3) UNION(UNION中的第二个或后面的SELECT语句);

(4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询);

(5) UNION RESULT(UNION的结果);

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

(7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询);

(8) DERIVED(派生表的SELECT, FROM子句的子查询);

(9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)。

3. table

这一列表示 explain 的一行正在访问哪个表。当 from 子句中有子查询时,table列是 <derivenN> 格式,表示当前查询依赖 id=N 的查询,于是先执行 id=N 的查询。当有union时,UNION RESULT的table列的值为 <union1,2>,1和2表示参与 union 的select行id。

4. type

表示MySQL在表中找到所需行的方式,又称“访问类型”。

常用的类型有:ALL, index,  range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)

ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行

index: Full Index Scan,index与ALL区别为index类型只遍历索引树

range:只检索给定范围的行,使用一个索引来选择行

ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。

eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读