sql 中(if)和(where)哪个更好?

问题描述 投票:0回答:2

在存储过程中,我想根据某些条件更新大型数据集,那么什么是更好的:

场景一(一选多if)

Select All Data records then 
LOOP

IF (Condition1 == true)
  execute update statement
IF (Condition2 == true)
  execute update statements
END LOOP

场景2(多选where)

Select Data where (condition 1) loop
   execute update statements
end loop

Select Data where (condition 2) loop
  execute update statements
end loop
sql oracle-database performance plsql
2个回答
2
投票

我认为没有一个答案在所有场景(数据库产品、选择查询、输入大小等)中都有效,但请记住:

  1. 基于 IF 的解决方案将只有一个选择和一个循环,因此,如果系统在选择记录(非常复杂的查询)上损失更多时间,也许最好进行一个循环。

  2. 您的解决方案基于 WHERE,而不是每个条件的一个查询,因此我会避免超过 2 或 3 个条件,除非它是非常非常快的查询(例如,从包含 100 条记录左右的配置表中选择记录)。

  3. 另外请记住,您可以将 IF 直接放在 UPDATE 语句中。

一般来说,我会选择 IF (1) 或 (3) 解决方案。


1
投票

另一种方法是使用

MERGE
语句 那么你不需要使用循环或单独的
SELECT
UPDATE
语句:

MERGE INTO destination dst
USING (
  SELECT *
  FROM   source
  WHERE  condition = True
) src
ON ( dst.id = src.id )
WHEN MATCHED THEN
  UPDATE SET column = src.column;
© www.soinside.com 2019 - 2024. All rights reserved.