1、查询优化:从众多的策略中找出最有效的查询执行计划的一种处理过程。
2、给定一个关系代数表达式,查询优化器的任务是产生一个查询执行计划,该计划能获得与原关系表达式相同的结果,并且得到结果集的执行代价最小(或至少是不比最小执行代价大多少)。
3、查询执行计划的产生有三步:
1)产生逻辑上与给定表达式等价的表达式。
2)对所产生的表达式以不同方式做注释,产生不同的查询计划。
3)估计每个计划执行的代价,选择估计代价最小的一个。
(物化视图能够帮助加速某些查询的处理)
4、一个查询可以表示为不同的形式,每种形式具有不同的执行代价。如果两个关系表达式在每一个有效数据库实例中都会产生相同的元组集,则称它们是等价的。(注意,元组的顺序是无关紧要的)
一个有效的数据库实例是指满足在数据库模式中指定的所有完整性约束的数据库实例。
5、等价规则:指出两种不同形式的表达式是等价的。
6、一个操作的代价依赖于它的输入的大小和其他统计信息。
7、对一个选择运算结果大小的估计依赖于选择谓词。
复杂选择有:合取,析取,取反。
其他的运算有:投影,聚集,集合运算,外连接。
8、基于代价的优化器从给定查询等价的所有查询执行计划空间中进行搜索,并选择估计代价最小的一个。
9、基于代价优化的一个缺点就是优化本身的代价。查询优化器使用启发式方法来减少优化代价。
方法有:1)尽早执行选择运算。2)尽早执行投影运算。
10、许多优化器允许为查询优化指定一个成本预算。当超过优化成本预算时停止搜索最优计划,返回当前找到的最优计划。预算本身可以动态设置。
11、物化视图:
定义一个视图时,一般来说只存储定义该视图的查询语句。而物化视图是一个其内容已计算并存储的视图。它带来了冗余数据,因为其内容可以通过视图的定义和数据库中其他数据得到。
12、视图维护:保持物化视图与原始数据同步更新的任务。
1)触发器必须根据导致触发器触发的变化对物化视图的内容进行修改。实现方法:每次更新时,对其进行全部重新计算。
2)增量的视图维护:只对物化视图的受影响部分进行修改。
3)立即的视图维护:当更新发生时,增量的视图维护作为更新事务的一部分立即执行。
4)延迟的视图维护:视图维护延迟到更晚一些执行。
13、聚集操作:count,sum,avg,min,max。
14、物化哪些视图集是最佳方案?
这个选择必须基于系统的工作负载,即反应系统通常负载的一系列查询和更新操作。标准是,选择的物化视图集应能够是系统完成查询和更新的工作负载所耗费的总执行时间(包括维护物化视图所用的时间)最短。
15、更新的优化:
更新查询通常在set和where子句中涉及子查询,这些也要在更新优化时考虑在内。
16、多查询优化:
当一批查询一起提交时,一个查询优化器可能发现不同查询之间共同的子表达式,仅执行它们一次并且在需要的时候重用。
公共子表达式消除:通过计算并存储结果,优化程序中不同表达式之间共享的子表达式,在子表达式出现的地方重用结果。
17、参数化查询优化:不提供具体参数值对查询进行优化。
18、计划缓存是许多数据库中采用的启发式方法。