在查询重写阶段,查询编译器将 SQL 和 XQuery 语句变换为更易于优化的格式;这有助于改进可能的存取方案。重写查询对于非常复杂的查询(包括那些包含许多子查询或许多连接的查询)而言特别重要。查询生成器工具通常会创建这些很复杂的查询。
要影响应用于 SQL 或 XQuery 语句的查询重写规则的数目,请更改优化类。要查看查询重写过程的某些结果,请使用说明工具。
使用视图的 SELECT 语句可能会限制表的连接顺序,并有可能引入冗余的表连接。如果在查询重写期间合并视图,那么可撤销这些限制。
如果 SELECT 语句包含子查询,那么可能会限制对表的顺序处理所作的选择。
在查询重写期间,可以除去冗余的连接,从而简化 SELECT 语句。
如果查询使用不同的函数,那么重写可减少需要执行的计算数。
在查询重写期间,优化器可以移动 DISTINCT 操作的执行位置,从而降低此操作的成本。在某些情况下,可以将 DISTINCT 操作完全除去。
在查询重写期间,优化器可以更改谓词的应用顺序,以便尽早将选择性更强的谓词应用于查询。
在分区数据库环境中,在数据库分区之间移动结果集的成本很高。减小必须广播至其他数据库分区的内容的大小并且/或者减少广播次数,是查询重写过程的目标。
在查询重写期间,可以对查询添加谓词,以使优化器在选择该查询的最佳存取方案时能够考虑其他表连接。
在查询重写期间,可以将 OR 谓词转换为 IN 谓词,以便提高存取方案的效率。SQL 和 XQuery 编译器还可以将 IN 谓词转换为 OR 谓词,但前提是此变换将创建效率更高的存取方案。