连接表时如何在oracle中加快查询执行速度

How to speed up query execution in oracle when the tables are joined

这个问题我已经问过了,但是被系统关闭了。 我有代码,在我向其中添加了一个非常重要的部分之后,它位于一个页面上,其中大量数据需要 3-5 分钟才能加载很长时间。这是一个演示,其中通过 https://dbfiddle.uk/?rdbms=oracle_18&fiddle=892dcef2af2f606a7c31d15dfcba7314 突出显示的部分可以使用很长时间。是否可以优化代码使其不响应?我尝试了 tables 索引,但它没有用,我将感谢 help.The 这部分代码的整个问题

    AND rep.id not in ( select o.id 
  from IOT_STREAM_ANALYTICS_LOG_REPRESENTATION o,
       IOT_STREAM_ANALYTICS_LOG_REPRESENTATION parent
 where o.parent = parent.parent
   and parent.key = 'reader'
   and parent.VALUE_STRING !=  txn.reader_value_string)

这段代码对应的事实是,当连接发生时,如果reader对我来说不合适table,我不想加入table。 我希望我根本没有子查询,结果就剩下了)

对于这种情况,很难在这里提出没有痕迹的东西(最好的选择)或执行计划。

看到这里,子查询可以改写成下面这样

select id 
  from IOT_STREAM_ANALYTICS_LOG_REPRESENTATION o,
       IOT_STREAM_ANALYTICS_LOG_REPRESENTATION parent
 where o.parent = parent.parent
   and parent.key = 'reader'
   and VALUE_STRING !=  txn.reader_value_string;

但我不确定使用同一列将 table 与其自身连接是否有意义。也许您想加入 o.parent 和 u.id?

... where o.parent in 
         (select u.id /* <-- */ from ...

正如我所说,如果这没有帮助,请向我们提供该查询的查询计划或跟踪

你不需要在这里使用第二个子查询:

select . . .
from . . . 
where . . . and 
      not exists (select 1
                  from IOT_STREAM_ANALYTICS_LOG_REPRESENTATION o
                  where o.key = 'reader' and
                        u.VALUE_STRING <> txn.reader_value_string and
                        rep.id = o.id
                 );