简答题 7.  查询转换包含哪些类型?
【正确答案】在Oracle数据库中,用户发给Oracle让其执行的目标SQL和Oracle实际执行的SQL有可能是不同的,这是因为Oracle可能会对执行的目标SQL做等价改写,即查询转换。查询转换(Query Transformation),也称为逻辑优化(Logical Optimization),又称为查询改写(Query Rewrite)或软优化,即查询转换器在逻辑上对语句做一些语义等价转换,它是Oracle在解析目标SQL的过程中的非常重要的一步。查询转换能使优化器将目标SQL改写成语义上完全等价的SQL语句但生成的执行计划效率更高。
   查询转换器依据特定的方式决定是否对查询块进行转换。按照其所依赖的方式,转换技术可以分为两类:①启发式查询转换(Heuristic Query Transformation),又称为基于规则的查询转换(Rule Based Query Transformarion),启发式查询转换是基于一套规则对查询进行转换,一旦满足规则所定义的条件,则对语句进行相应的转换。启发式查询转换需要从10053事件信息中查找有关查询转换的线索,并且许多跟踪记录仅能从Oracle 11g的跟踪信息中发现。②基于代价的查询转换(Cost Based Query Transformation,CBOT)。基于代价的查询转换是否对语句进行转换则取决于语义等价语句之间的代价对比,即采用代价最小的一种。大多数基于代价的查询转换可以从执行计划的概要数据中找到线索。Oracle提供了一个隐含参数“_OPTIMIZER_COST_BASED_TRANSFORMATION”用以控制是否进行基于代价的查询转换,以及如何进行基于代价的查询转换,从而限制其对资源的消耗。
   Oracle中常见的查询转换分类如图所示。
   

   常见的查询转换分类

   Oracle中常见的查询转换分类详解见表。
   

   
   
【答案解析】