如何避免频繁查询相同的字段而不求助于使用临时 table?

How can I avoid frequently querying the same fields without resorting to using a temp table?

所以我有以下查询(出于安全原因进行了混淆处理)但是 运行:

需要几个小时
SELECT  t.apple as APPLE,
        t.orange as ORANGE,
        t.kiwi as KIWI
FROM    table_in_linked_db@db_link t
WHERE (t.pear = 'FOO' OR t.grape  = 'BAR') 
AND     t.apple NOT IN 
            (SELECT val 
             FROM   table_in_my_db
             WHERE  type = 'APPLE')
OR      t.orange NOT IN 
            (SELECT val 
             FROM   table_in_my_db 
             WHERE  type = 'ORANGE');   

通常,在其他语言中,我会在开头创建一个临时文件 table,其中包含 table_in_my_db 中的值,以避免必须为 [=13] 中的每一行查询和遍历它=].但是根据我的阅读,创建和销毁 temp tables 在 Oracle SQL 中是不好的做法,因为只有数据是临时的。

有人知道我可以使用的替代方案吗?可能通过重写我现有的查询?

您可以尝试将以下索引添加到子查询中的 table:

CREATE INDEX idx1 ON table_in_my_db (type, val);

这应该让 Oracle 非常快速地评估两个子查询,从而提高整体查询的性能。