简单MySQL教程三
《简单MySQL教程三》要点: 一、性能阐发 1、MySql Query Optimizer 1 )、Mysql中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端哀求的Query提供他认为最优的执行计划(它认为最优的数据检索方式,但不见得是DBA认为是最优的,这部分最耗费时间) 2) 当客户端向MySQL 哀求一条Query,命令解析器模块完成哀求分类,区别出是 SELECT 并转发给MySQL Query Optimizer时,MySQL Query Optimizer 首先会对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值.并对 Query 中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等.然后分析 Query 中的 Hint 信息(如果有),看显示Hint信息是否可以完全确定该Query 的执行计划.如果没有 Hint 或Hint 信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据 Query 进行写相应的计算分析,然后再得出最后的执行计划. 2、MySQL常见瓶颈
二、explain症结字 1、explain是什么 使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何处理你的SQL语句.分析你的查询语句或是表布局的性能瓶颈. 2、explain做什么 可以查看以下内容:
3、explain怎样用 执行Explain + sql语句可以查看一下内容 4、各字段解释
select查询的序列号,包括一组数字,表示查询中执行select子句或操作表的顺序,数字相同的从上到下依次执行,不同的数字大的优先执行.
查询的类型,主要用于区别普通查询,联合查询,子查询等繁杂查询.主要有以下6种
显示这一行数据来自哪一张表
表示拜访类型,从最好到最坏依次为system const eq_ref ref fulltext ref_or_null index_merge unique_subquery index_subquery range index ALL 一般来说至少要到达range级别.
显示可能应用在这张表中的索引,一个或多个.查询涉及到的字段上若存在索引,则该索引将被列出,但不必定被查询实际使用
实际使用的索引.如果为NULL,则没有使用索引.查询中若使用了笼罩索引,则该索引和查询的select字段重叠
表现索引中使用的字节数,可通过该列计算查询中使用的索引的长度.在不损失精确性的情况下,长度越短越好 key_len显示的值为索引字段的最年夜可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的
显示索引的哪一列被使用了,假如可能的话,是一个常数.哪些列或常量被用于查找索引列上的值
根据表统计信息及索引选用情况,大致估算出找到所需的记录所必要读取的行数
包括以下内容: 5、举例阐发 第一行(执行顺序4):id列为1,表示是union里的第一个select,select_type列的primary表 示该查询为外层查询,table列被标志为derived3,表示查询结果来自一个衍生表,其中derived3中3代表该查询衍生自第三个select查询,即id为3的select.【select d1.name......】 第二行(执行顺序2):id为3,是整个查询中第三个select的一部分.因查询包括在from中,所以为derived.【select id,name from t1 where other_column=''】 第三行(执行次序3):select列表中的子查询select_type为subquery,为整个查询中的第二个select.【select id from t3】 第四行(执行顺序1):select_type为union,阐明第四个select是union里的第二个select,最先执行【select name,id from t2】 第五行(执行顺序5):代表从union的临时表中读取行的阶段,table列的union1,4表现用第一个和第四个select的结果进行union操作.【两个结果union操作】 教程四会出怎样样优化索引和避免索引失效 《简单MySQL教程三》是否对您有启发,欢迎查看更多与《简单MySQL教程三》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |