上节谈了关于mysql锁定机制的优化方案,下面来谈一下Query优化——Mysql Query Optimizer
当Mysql Query Optimizer接受到从Query Parser过来的Query时会根据相应语法进行分解分析,同时还会做很多其他的计算转化工作如常量转化,无效内容删除、常量计算等。所有这些工作都是为了Optimizer分析出最优的数据检索方式---执行计划。
Mysql Query Optimizer所有工作建立在Query Tree的基础上,QueryTree是通过优化实现DBXP的经典数据结构和Tree构造器而生成的,是指导一个完成一个Query语句的请求需要处理工作步骤,只是以Tree的数据结构存放而已。通过QueryTree可以很清楚的指导一个Query的完成需要经过哪些步骤,每一步的数据来源在哪里,处理方式是怎样的,在整个过程中,mysql使用了LEX和YACC这两个词法分析工具
Query语句优化基本思路:
1.优化更需要优化的query
2.定位优化对象的性能瓶颈
3.明确优化目标
4.从执行计划入手
5.多使用Profile
以上五点不是废话,只有清楚的知道了哪个地方是更需要优化的,性能瓶颈在什么地方,具体设计哪些对象,这样才能有效的优化,否则事倍功半。
Query优化原则:
1.永远使用小结果集驱动大结果集
2.尽可能在索引中完成排序
3.只取自己需要的列
4.仅仅使用最有效的过滤条件
5.尽可能避免复杂的join和子查询
解释一下以上五点。小结果集驱动,目的是减少循环,循环减少了,以为这被驱动表