【问题标题】:find match between 2 sql queries在 2 个 sql 查询之间找到匹配项
【发布时间】:2009-11-03 11:17:24
【问题描述】:

我有两个来自 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 透视匹配。有没有其他解决办法?

【问题讨论】:

    标签: sql algorithm oracle match


    【解决方案1】:

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

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

    【讨论】:

    • 嗨 vincent,脚本将 sql 分组。我需要展示该组下的每个此类查询。如果有 20 个按上述脚本分组的查询,我需要列出所有这 20 个查询。我该怎么做。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-04-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-03
        • 1970-01-01
        • 2017-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        相关资源
        最近更新 更多