PLSQL - 在插入之前检查重复的最快方法

时间:2014-02-10 21:54:43

标签: sql oracle insert duplicates primary-key

(使用Oracle)我有一个包含一列(myCol)的表,它是主键。

在进行插入时,在执行插入之前检查select语句是否更快,或者只是编写插入并让错误处理检查它?

那会更快吗?

BEGIN

SELECT count(*) INTO v_count FROM myTbl WHERE myCol = v_newVal;

IF v_count = 0 THEN
     INSERT INTO myTbl (myCol) VALUES (v_newVal);
END IF;

END;

还是这个?

BEGIN

INSERT INTO myTbl (myCol) VALUES (v_newVal);

EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
     null;

END;

谢谢!

2 个答案:

答案 0 :(得分:1)

我想你可以尝试合并。通常,您应该避免重复检查count()。还有一个提示可以用来忽略重复项。这个页面给出了一个很好的例子。

http://guyharrison.squarespace.com/blog/2010/1/1/the-11gr2-ignore_row_on_dupkey_index-hint.html

答案 1 :(得分:1)

就性能而言,第二种选择当然更好。

但是,更重要的是,第一个选项有一个错误 - 如果多个会话尝试同时插入相同的值,它将失败 - 其中一个会成功,另一个会话将等待第一个提交然后提出DUP_VAL_ON_INDEX(你还没有处理)。

相关问题