Mysql查询优化概念

广义的查询优化:

1,查询重用2,查询重写规则3,查询优化算法4,并行查询优化5,分布式查询优化

狭义的查询优化:

1,查询重写规则(逻辑优化方式)2,查询算法优化(物理优化方式)

查询重用是指尽可能利用先前的执行结果,以达到节约查询计算全过程的时间并减少资源消耗的目的。
查询重用技术主要集中在两个方面:
1.查询结果重用在缓存区中分配一块缓冲块,存放SQL语句文本和最后的结果集,当同样的SQL输入时,直接把结果返回。查询结果重用技术节约了查询计划生成时间,减少了查询执行全过程的资源消耗。
2.查询计划的重用:缓存一条查询语句的执行计划及其相应语法树结构。查询计划的重用技术减少了查询计划生成的时间和资源消耗。
优点:节约了CPU和IO消耗
缺点:结果集很大会消耗很大的内存资源,同样的SQL不同用户应该获取的结果集可能不同
查询重写:是查询语句的一种等价转换,即对于任何相关模式的任意状态都会产生相同的结果。
查询重写的两个目标:
1.将查询转换为等价的效率更高的形式,例如将效率低的谓词转换为效率高的谓词、消除重复条件等。
2.尽量将查询重写为等价、简单且不受表顺序限制的形式,为物理查询优化阶段提供更多的选择,如视图重写、子查询的合并转换等。
查询优化技术类型:
1.语法级:查询语言层的优化,基于语法进行优化。
2.代数级:查询使用形式逻辑进行优化,运用关系代数的原理进行优化。
3.语义级:根据完整性约束,对查询语句进行语义理解,推知一些可优化的操作。
4.物理级:物理优化技术,基于代价估算模型,比较得出各种执行方式中代价最小的。

查询重写思路:
1.将过程性查询转换为描述性的查询,如视图重写。
2.将复杂的查询(如嵌套子查询,外链接消除,嵌套连接消除)尽可能转换为多表连接查询。
3.将效率低的谓词转换为等价的效率高的谓词
4.利用等式和不等式的性质,简化WHERE HAVING条件。
5.如何改进现有查询重写规则的效率,如何发现更多更有效的重写规则,是查询优化的研究内容之一。

查询优化算法:
查询计划:由一系列内部的操作符组成,这些操作符按一定的运算关系构成查询的一个执行方案。
查询计划实际上是二叉树,获得单表节点的方式:
1.直接通过IO获得数据,成为全表扫描。
2.通过索引获取数据,称为索引只读扫描。
3.通过索引定位数据的位置后再经过IO到数据块中获取数据,称为索引扫描。

两表节点:
考虑两表以何种方式连接、代价有多大、连接路径有哪些、表示的是内存中的元组,怎么进行元组间的连接。
此时,元组通常已经存在于内存,直接使用即可。这是一个完成用户语义的逻辑操作,但是只是局部操作,只设计两个具体的关系。

完成用户全部语义,需要配合多表的连接顺序的操作,有嵌套连接,归并连接等。
生成最优查询计划的策略:
1、基于规则优化:根据经验或一些已经探知或被证明有效的方式,定义为“规则”,用这些规则化简查询计划生成过程中符合可被化简的操作,
使用启发式规则排除一些明显不好的存取路径,这就是基于规则的优化。
2.基于代价优化:根据一个代价评估模型,在生成查询计划的过程中,计算每条存取路径的花费,然后选择代价最小的作为子路径,
这样直至所有表连接完毕得到一个完整的路径。
总代价:CPU代价+IO代价。

查询优化并行的条件:
1.系统中的可用资源。
2.CPU的数目
3.运算中的特定代数运算符。
在同一个SQL内,查询并行可以分为:
1.操作内并行:将同一个操作如单表扫描操作、两表连接操作、排序操作等分解成多个独立的子操作,由不同的CPU同时执行。
2.操作间并行:一条SQL查询语句可以分解成多个子操作,由多个CPU执行
在分布式数据库系统中,代价估算模型为:
总代价=IO代价+CPU代价+通信代价。
连接操作涉及两个子问题:
多表连接中每个表被连接的顺序决定着效率。
多表连接每个表被连接的顺序被用户语义决定。
查询的2种类型:
1.针对SPJ的查询优化:基于选择、投影、连接三种基本操作相结合的查询所做的优化。
2.针对非SPJ的查询优化:在SPJ的基础上存在GROUP BY操作的查询,对带有GROUP BY .ORDER BY等操作的优化
逻辑查询优化包括的技术:子查询优化、视图重写、等价谓词重写、条件化简、外链接消除、嵌套连接消除、连接消除、语义优化、非SPJ优化
物理查询优化=代价模型+索引的利用+单表扫描算法+两表连接算法+多表连接算法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值