Oracle select in 循环 vs select with in 子句

Oracle select in loop vs select with in clause

哪个执行得更快

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 一次只会有一行,这很容易混淆我。

我只需要从概念上知道哪一个会表现得更好,哪一个是正确的方法?

Tom Kyte 的口头禅是:

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

我发现这是一个非常有用的经验法则。