前一节介绍了逻辑优化,包括语义上的优化等,体现在等价的结果集的基础上,是的执行时间最短,使用建立索引的条件查询来实现等。这节就开始从物理的层面优化,物理层面的优化就体现在算法,以及索引。
单标扫描算法
这里的扫描算法也是需要结合索引来说,如果没有建立索引,查询执行计划的时候就出现seqscan,如果建立了索引就出现indexscan。这里单表扫描重点在于常用的全表扫描以及局部扫描,索引扫描,行扫描,并行表扫描,组合索引扫描等,相关的含义可以参考书中的46页有详细额介绍,但是背书的环节只会在面试上用到,所以了解即可。下面重点关注索引,有关索引,作者是花了整整一章的来描述,可见其重要性。
索引
索引是为了减少IO的操作,实现更快的获取数据。一般常见的使用方式是,索引作为条件出现在WHERE ,ON ,HAVING, ORDERBY等,但是如果出现ORDERBY出现的非索引列,这时候还是seqscan来运行。或者作为连接表出现到过滤条件中。但是如果遇到!= 这种不等于操作的时候,这时候顺序扫描就比索引扫描性能要好。但是如果使用索引出现在GROUPBY的条件中,不会触发索引。同样DISTINCT的执行也是不会执行索引。
两表连接算法
两表连接的时候,优化器执行的是嵌套连接算法,基于元组块实现嵌套,一般分为嵌套循环连接,归并连接,Hash连接。简单介绍到这里,只要是需要知道两表的连接是如何产生嵌套即可。
多表连接的顺序
基本这个是反映