从 Microsoft Sql 获取 Id 或插入值的最快方法
Fastest way to get Id or insert value from Microsoft Sql
我在插入大量值时数据库性能不佳。
在插入之前,我必须检查该值是否已经存在,如果存在则获取它的 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
有没有更好的操作方式?
table 上的正确索引应该很快(根据上面的评论),所以首先解决这个问题。
但是,您正在查询 table 两次,而您可能可以点击一次。伪代码:
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 ...
我在插入大量值时数据库性能不佳。 在插入之前,我必须检查该值是否已经存在,如果存在则获取它的 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
有没有更好的操作方式?
table 上的正确索引应该很快(根据上面的评论),所以首先解决这个问题。
但是,您正在查询 table 两次,而您可能可以点击一次。伪代码:
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 ...