我在插入大量值时数据库性能不佳。 在插入之前,我必须检查该值是否已经存在并获取其ID(如果存在),就像在此查询中一样:
DECLARE @p0 int
DECLARE @p1 VARCHAR(255)
SET @p0 = 1
SET @p1 = '123123123123'
IF NOT EXISTS(SELECT TOP (1) Id
FROM Orders
WHERE MyId = @p0 AND Number = @p1)
BEGIN
INSERT Orders (MyId, Number) VALUES (@p0, @p1)
END
SELECT TOP (1) Id FROM Orders WHERE MyId = @p0 AND Number = @p1
有没有更好的方法来执行此操作?
答案 0 :(得分:2)
对于表格上的正确索引,这应该很快(根据上面的评论),所以首先解决这个问题。
但是,当你可以打一次时,你正在查询表两次。伪代码:
declare @id int
select @id = id FROM Orders WHERE MyId = @p0 AND Number = @p1
if ( @id is null )
begin
insert into ....
set @id = scope_identity()
end
select @id ...