我有一个名为Products
多列的表。它是用于报告目的的临时表。多个用户请求将同时处理数据到该表。有单独的存储过程可以对该表进行 DML 操作。
表结构:
CREATE TABLE Products (
instance uniqueidentifier,
inserted datetime,
col1,
col2,
...
)
该inserted
列将被填充GETDATE()
以包含插入每行的时间,并且该instance
列将包含来自 的值newid()
。一个用户请求将有一个唯一的 id,但可能有数百万行。以下是将并发执行的查询,这会导致死锁。请给我提意见
查询一:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DELETE P
FROM Products (NOLOCK)
WHERE instance = 'XXXX-xxx-xxx-xx'
查询 2:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DELETE P
FROM Products (NOLOCK)
WHERE inserted <= DATEADD(hh, -10, GETDATE())
注意:非聚集索引是在实例列上创建的。
请告诉我在这种情况下我可以使用哪种锁。
注意我不能主键,因为当我向表中插入 1000 万行时它会消耗时间(这对于一个事务;有 20 个并发事务)。报告应尽快生成。我的程序有多个 35 个 DML 语句,大约有 15 个 DELETE 语句,例如带有其他列的列(DELETE FROM table WHERE instance = @instance AND col1 = @col1
)。