关系查询处理和查询优化
9.1关系数据库系统的查询处理
查询处理是关系数据库管理系统执行查询语句的过程,其任务是把用户提交给关系数据库管理系统的查询语句转换为高效的查询执行计划。
9.1.1查询处理步骤
关系数据库管理系统查询处理可以分为4个阶段:查询分析、查询检查、查询优化和查询执行。
1.查询分析
首先对查询语句进行扫描、词法分析和语法分析。
2.查询检查
对合法的查询语句进行语义检查,即根据数据字典中有关的模式定义检查语句中的数据库对象。如果是对视图的操作,则要用视图消解方法把对视图的操作转换成对基本表的操作。还要根据数据字典中的用户权限和完整性约束定义对用户的存取权限进行检查。如果该用户没有相应的访问权限或违反了完整性约束,就拒绝执行该查询。当然,这时的完整性检查是初步的、静态的检查。检查通过后便把SQL查询语句转换成内部表示,即等价的关系代数表达式。关系数据库管理系统一般都用查询树,也称为语法分析树来表示扩展的关系代数表达式。
3.查询优化
查询优化就是选择一个高效执行的查询处理策略。按照优化的层次一般可将查询优化分为代数优化和物理优化。代数优化是指关系代数表达式的优化,即按照一定的规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询执行更高效;物理优化则是指存取路径和底层操作算法的选择。选择的依据可以是基于规则的,也可以是基于代价的,还可以是基于语义的。
4.查询执行
依据优化器得到的执行策略生成查询执行计划,由代码生成器生成执行这个计划的代码,然后加以执行,回送查询结果。
9.2关系数据库系统的查询优化
它减轻了用户选择存取路径的负担。用户只要提出“干什么”,而不必指出“怎么干”。
查询优化的优点不仅在于用户不必考虑如何最好的表达查询以获得较高的效率,而且在于系统可以比用户程序的“优化”做得更好。
关系代数表达式的启发式优化是由DBMS的DML编译器完成的。
9.3代数优化
代数优化策略是通过对关系代数表达式的等价变换来提高查询效率。所谓关系代数表达式的等价是指用相同的关系代替两个表达式中相应的关系所得到的结果是相同的。
选择运算应尽可能先做。把投影运算和选择运算同时进行。把投影同其前或后的双目运算结合起来。
把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接运算要比同样关系上的笛卡尔积省很多时间。找出公共子表达式。
9.4物理优化
代数优化改变查询语句中操作的次序和组合,但不涉及底层的存取路径。物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划,达到查询优化的目标。