关于数据库:数据库优化器与算子优化
优化器概念优化器是数据库中用于把关系表达式转换成执行打算的外围组件,很大水平上决定了一个零碎的性能 优化器会蕴含一系列优化规定,这些优化规定能够对关系表达式进行等价转换,从而生成执行打算 优化规定常见逻辑算子DataSource:数据源,也就是咱们SQL语句中的表,select name from table1中的table1Selection:抉择,Where 条件,如select name from table1 where id = 1中的where后的过滤条件Projection:投影,指搜寻抉择的列,如select name from table1 where id = 1中的列nameJoin:连贯,如select * from table1 table2 where table1.name=table2.name就是把两个表做Join,连贯条件是最简略的等值连贯,当然还有其余咱们熟知的inner join,left join,right join等等Sort:排序,如select * from table1 order by id外面的order by,无序的数据通过这个算子解决后,输入有序的数据Aggregation:分组,如select sum(score) from table1 group by name中的group by,依照某些列进行分组,分组后能够进行一些聚合操作,比方Max、Min、Sum、Count、Average等等Apply:子查问,如select * from (select id,name from table1) as t中的(select id,name from table1) as t,能够进行嵌套查问优化规定-谓词下推将外层查问块where子句中的谓词移入所蕴含的较低层次的查问块,从而可能提前进行数据过滤以及更好的应用索引 举例比方对于表t1(100条数据),t2(100条数据),对于查问语句select * from t1,t2 where t1.a > 3 and t2.b >5 执行间接执行:执行时候是把t1和t2两个表做笛卡尔积,须要解决10000条数据,而后再依据条件进行过滤进行谓词下推:比方t1.a > 3的数据有10条,t2.b > 5的有5条,先进行过滤咱们所须要解决的数据条数则只有50条了,这就是尽量把过滤条件往下推到子节点上,就能够防止拜访很多数据,从而达到优化的成果对于算子的谓词下推DataSource算子,间接将过滤条件推给各个DataSource算子即可对于Join算子,则会首先进行简化,将外连贯转化为内连贯,收集连贯条件,辨别出哪些来自于Join的左节点哪些来自于Join的右节点,别离像左右节点进行下推留神点不能下推Limit,因为先进行Limit n再做Selection操作和先做Selection操作再Limit n失去的后果是不一样的 ...