oracle SQL配置文件 3

1.1.1.1   文本标准化

SQL配置文件的一个主要优势是尽管它应用于某个SQL语句,但它并不会对SQL语句做任何修改。实际上,SQL配置文件保存在数据字典中,并且查询优化器会自动选择它们。图11-6显示了在选择过程中会实施的基本步骤。

首先,会使SQL语句标准化,这代表不仅要不区分大小写,还要不使用空格。基于结果的SQL语句会计算出签名。然后会根据签名在数据字典中进行查找。每当找到有相同签名的SQL配置文件时,就会执行检查来确保SQL语句是最优的并且关联SQL配置文件的SQL语句也是等价的。这一步很重要,因为签名其实是个散列值,因此可能会存在冲突。如果检测成功,会将与SQL配置文件关联的hint加入到生成的执行计划中。

如果SQL语句包含的文字发生改变,它会像散列值签名一样改变。因此,SQL配置文件是没用的,因为SQL配置文件被绑定到某个仅会执行一次的SQL语句。为了避免这个问题,数据库引擎会在标准化阶段去除文字部分。要启用这个功能,需要在应用SQL配置文件时将force_match参数设置为TRUE。

图11-6 SQL配置文件选择期间实施的主要步骤



为了研究文本标准化的工作原理,可以使用dbms_sqltune包中的sql_text_to_signature函数。它需要两个输入参数,sql_text和force_match。前者指定SQL语句,后者指定文本标准化的类型。下面是节选自profilesignature.sql脚本生成的输出,展示了在签名不同但是相似的SQL语句上force_match参数的影响。

Ø  force_match设置为FALSE:空格和不区分大小写。

SQL TEXT

select * FROM dual WHERE dummy ='X'

select   *   from   dual   where   dummy='X'