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

问题描述 投票:0回答:1

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

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

此代码与以下事实相对应:当发生连接时,如果阅读器不适合我,则我不想加入该表。

sql oracle oracle11g query-performance
1个回答
1
投票

在这种情况下,很难建议一些没有跟踪(最佳选择)或执行计划的东西。

我在这里可以看到的所有子查询都可以按以下方式重写

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;

但是我不确定这是否会导致使用同一列将表与其自身连接。也许您想将o.parent与u.id一起加入?

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

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

© www.soinside.com 2019 - 2024. All rights reserved.