我在Oracle中开发程序 我需要写这样的东西:
--
open curr1 for
select *
from table1
where key_field in (select key_field from tbl_keys where type = 1);
--
open curr2 for
select *
from table2
where key_field in (select key_field from tbl_keys where type = 1);
--
open curr3 for
select *
from table3
where key_field in (select key_field from tbl_keys where type = 1);
--
有更好的方法吗? 内部选择的任何优化? 谢谢!
答案 0 :(得分:0)
我认为Oracle会尝试缓存您的tbl_keys
子查询的结果,因此如果它返回少量行,那么您的查询可能会很好。
我不知道它是否更好,但如果您遇到性能问题,可以尝试使用 alternate 方法加入表格,例如
open curr1 for
select t.*
from table1 t
join tbl_keys k
on k.key_field = t.key_field
and k.type = 1;
如果你的tbl_keys表非常大,这个可能会提高性能。
就个人而言,我更喜欢尽可能使用隐式游标循环 - 它们很简单且速度非常快 - 但我不知道它是否适用于您的程序,因为您没有显示其余部分。< / p>
for r in (select t.*
from table1 t
join tbl_keys k
on k.key_field = t.key_field
and k.type = 1)
loop
-- output the row somehow
end loop;
for r in (select t.*
from table2 t
join tbl_keys k
on k.key_field = t.key_field
and k.type = 1)
loop
-- output the row somehow
end loop;
...etc