深圳网页设计,深圳网站设计

网站建设 2018-06-26 11:20www.1681989.com免费网站
语法解析和预处理
MySQL 通过关键字将 SQL 语句进行解析,并生成一棵对应的解析树。深圳网站建设,深圳网站制作,深圳做站,这个过程解析器主要通过语法规则来验证和解析。比如 SQL 中是否使用了错误的关键字或者关键字的顺序是否正确等等。
预处理则会根据 MySQL 规则进一步检查解析树是否合法。深圳网页设计,深圳网站设计,比如检查要查询的数据表和数据列是否存在等等。
查询优化
经过前面的步骤生成的语法树被认为是合法的了,并且由优化器将其转化成查询计划。
多数情况下,一条查询可以有很多种执行方式,都返回相应的结果。优化器的作用就是找到这其中最好的执行计划。
MySQL 使用基于成本的优化器,它尝试预测一个查询使用某种执行计划时的成本,并选择其中成本最小的一个。
在 MySQL 可以通过查询当前会话的 last_query_cost 的值来得到其计算当前查询的成本。
mysql> select from t_message limit 10;...省略结果集mysql> show status like 'last_query_cost';+-----------------+-------------+| Variable_name   | Value       |+-----------------+-------------+| Last_query_cost | 6391.799000 |+-----------------+-------------+
示例中的结果表示优化器认为大概需要做 6391 个数据页的随机查找才能完成上面的查询。
这个结果是根据一些列的统计信息计算得来的,这些统计信息包括每张表或者索引的页面个数、索引的基数、索引和数据行的长度、索引的分布情况等等。
有非常多的原因会导致 MySQL 选择错误的执行计划,比如统计信息不准确、不会考虑不受其控制的操作成本(用户自定义函数、存储过程)。
MySQL 认为的最优跟我们想的不一样(我们希望执行时间尽可能短,但 MySQL 值选择它认为成本小的,但成本小并不意味着执行时间短)等等。
MySQL 的查询优化器是一个非常复杂的部件,它使用了非常多的优化策略来生成一个最优的执行计划
重新定义表的关联顺序(多张表关联查询时,并不一定按照 SQL 中指定的顺序进行,但有一些技巧可以指定关联顺序)。
优化 MIN() 和 MAX() 函数(找某列的最小值,如果该列有索引,只需要查找 B+Tree 索引最左端,反之则可以找到最大值,具体原理见下文)。
提前终止查询(比如使用 LIMIT 时,查找到满足数量的结果集后会立即终止查询)。
优化排序(在老版本 MySQL 会使用两次传输排序,即先读取行指针和需要排序的字段在内存中对其排序,然后再根据排序结果去读取数据行,而新版本采用的是单次传输排序,也就是一次读取所有的数据行,然后根据给定的列排序。对于 I/O 密集型应用,效率会高很多)。
随着 MySQL 的不断发展,优化器使用的优化策略也在不断的进化,深圳免费建站,深圳自助建站,这里仅仅介绍几个非常常用且容易理解的优化策略,其他的优化策略,大家自行查阅吧。

Copyright © 2016-2025 www.1681989.com 推火网 版权所有 Power by