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 外部例程中做到这一点,你可能要认真考虑为什么你需要这样做......
我发现这是一个非常有用的经验法则。
哪个执行得更快
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 外部例程中做到这一点,你可能要认真考虑为什么你需要这样做......
我发现这是一个非常有用的经验法则。