Oracle select in loop vs select with in子句

时间:2015-02-04 07:50:01

标签: oracle performance

哪个会表现得更快

1. 
SELECT * 
FROM test
WHERE id IN (1, 2, 3, 4, 5);

或者

2.
FOR s IN (SELECT id FROM ids)
LOOP
  SELECT * FROM test where id = s.id;
END LOOP;

我认为第一个查询的执行速度会更快,因为它会被执行一次,但是看第二个查询它只需要获取与一个id相关的数据,这个ID一次只能是一行,这让我感到困惑。

我只需要在概念上知道哪一个会表现得更好,哪种方式正确?

1 个答案:

答案 0 :(得分:2)

Tom Kyte的口头禅是:

  • 如果可能,您应该在单个SQL语句中执行此操作。
  • 如果您无法在单个SQL语句中执行此操作,请在PL / SQL中执行此操作。
  • 如果您无法在PL / SQL中执行此操作,请尝试使用Java存储过程。
  • 如果您不能在Java中执行此操作,请在C外部过程中执行此操作。
  • 如果你不能在C外部例行程序中这样做,你可能要认真考虑为什么需要这样做...

我觉得这是一个非常有用的经验法则。