1

大家好 :) 我需要 Oracle 了解嵌套查询需要保持嵌套,以解决性能问题。

这是查询:

SELECT * FROM (
  SELECT 
    UTL_MATCH.JARO_WINKLER_SIMILARITY(clients_me.address, clients_them.address) jw,
    clients_them.*,
    clients_me.* 
  FROM clients_them JOIN clients_me ON clients_me.email = clients_them.email
) WHERE jw > 80

没有最后一个性能很好WHERE jw > 80。我的理解是 Oracle 尝试在嵌套查询内的联接中添加 JARO_WINKLER_SIMILARITY。我只是想过滤一些不好的匹配。

最好的祝福

4

2 回答 2

1

您可以尝试输入一些提示,例如NO_QUERY_TRANSFORMATION, 或可能NO_PUSH_SUBQNO_MERGE。(我不是提示专家,而且我认为大多数时候最好避免提示)。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements006.htm#BABCGJDI

但是恕我直言,最好的办法是让您执行不良查询的执行计划,这样您就会知道没有按预期发生。

于 2013-03-11T19:35:07.670 回答
1

push_pred / no_push_pred:如果你的查询中有一个不可合并的视图(可能是因为no_merge提示),你应该如何操作来自其他表的join;您应该创建一个大视图结果并将其连接一次 (no_push_pred) 还是应该将连接谓词下推到视图定义中并为另一个表中的每个驱动行重新创建视图结果集 (push_pred)。

这意味着 push_pred 仅对 no_merge 有效。
请尝试添加如下提示:

/*+ no_merge(y) no_push_pred(y) */
于 2013-03-14T05:52:23.083 回答