📅  最后修改于: 2023-12-03 14:50:05.625000             🧑  作者: Mango
关系查询评估是指对于给定的查询,评估其在关系数据库中的查询代价。查询代价通常包括磁盘I/O、CPU计算等。相比于基于规则的查询优化方法,关系查询评估更加灵活,能够支持更加复杂的查询语句和数据库设计。
本文将介绍两套常用的关系查询评估算法:基于代价模型的查询优化算法和基于启发式规则的查询优化算法。其中,代价模型算法通过对查询代价建模,估算出各种查询计划的代价,最终选择代价最小的计划。启发式规则算法则是通过人工设定的规则,对查询语句进行变换和优化。
基于代价模型的查询优化算法是最为常见的关系查询评估算法。它利用代价模型对每个可能的关系代数表达式进行评估,并选择代价最小的表达式作为最终的执行计划。
代价模型通常包括三个部分:磁盘I/O代价、CPU代价和内存使用代价。磁盘I/O代价是指读写磁盘的次数;CPU代价是指执行查询所需要的计算量;内存使用代价是指查询过程中占用的内存大小。
常见的查询代价计算方法有以下几种:
对于一个给定的查询,基于代价模型的查询优化算法遵循以下步骤:
其中,第三步是算法的核心。对于一颗关系代数表达式树,可通过递归遍历的方式枚举所有可能的关系代数表达式。对于每个表达式,计算它的代价并选择代价最小的表达式。
基于启发式规则的查询优化算法是一种人工设计的算法,其目的是通过一系列设计好的规则对查询语句进行变换和优化,从而提高查询性能。
启发式规则通常包括以下几类:
对于一个给定的查询,基于启发式规则的查询优化算法遵循以下步骤:
其中,第一步是算法的核心。根据启发式规则对查询进行变换和优化,从而生成更加高效的查询语句。第二步和第三步是算法的循环部分,对于不同的查询需要循环进行多次优化才能得到最优解。
基于代价模型的查询优化算法和基于启发式规则的查询优化算法都可以有效地提高查询性能。前者通过建模估算虚拟执行计划的代价,优选最佳执行计划,需要对所有可能的代数表达式进行全枚举;后者则是通过设计启发式规则向量,适度假设各个精细化操作成本消耗相同,局部调整执行方案的优化方法。两种算法可以互相对接,互相取长补短,共同用于关系数据库中的查询优化。