如果您获取所有行,我的 View 会非常慢。但如果我选择一个子集(在 where 子句中提供 ID),性能会非常好。我无法对 ID 进行硬编码,因此我创建了一个子选择来从另一个表中获取 ID。子选择仅返回一个ID。现在性能非常慢,看起来 Oracle 在使用 where 子句之前正在评估整个 View 。我可以以某种方式帮助 Oracle 让 SQL 2 和 3 具有相同的性能吗?我正在使用 Oracle 10g
1 慢
从 ci.my_slow_view 选择 *
2快
从 ci.my_slow_view 中选择 *,其中 id = 1;
3慢
select * from ci.my_slow_view where id in (select id from active_ids)
最佳答案
怎么样
select * from ci.my_slow_view where id = (select id from active_ids)
用“=”替换“in”将告诉 Oracle 您希望“select id from active_ids”仅返回一行。
关于performance - Oracle,使用子选择时性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2957637/