找到2个sql查询之间的匹配

时间:2009-11-03 11:17:25

标签: sql algorithm oracle match

我有两个来自v $ sqlarea的查询。例如

查询1:select * from employee emp where emp.eid = 5

查询2:select * from employee v where v.eid = 15

两者在结构上完全相同。但每次都会单独编译..

我需要匹配仅由别名或绑定变量变化的查询。

oracle中的内置函数utl_match.jaro_winkler_similarity()提供了一个非常好的字符串匹配算法。但是没有提供sql透视匹配。还有其他解决方案吗?

3 个答案:

答案 0 :(得分:1)

有一个script on Asktom可以找到这种语句(语句使用绑定)。

  

最后一个查询的输出将显示共享中相同的语句   删除所有数字和字符串常量后的池。这些   声明 - 更重要的是它们的数量 - 是潜在的瓶颈。在   除了引起争用外,他们将成为巨大的cpu消费者。

答案 1 :(得分:1)

Oracle实际上在内部执行此操作,以支持cursor_sharing = similar。我不知道他们在任何地方公开这个功能。

答案 2 :(得分:0)

别名是一个棘手的问题。您可以查找具有相同PLAN_HASH_VALUE作为起点的SQL。