0

我正在尝试删除只有大约 39K 记录的表,但由于某些原因,即使删除一条记录也需要时间(大约 1.5 分钟)。如何提高删除操作的性能。如何确保日志活动不会花费太多时间。我可以将“DELETE”语句放在一个while循环中,然后每次成功完成时打开一个事务并提交它。还有其他有效的方法吗?

[PrimaryKey] 这里有一个“聚集索引”

DECLARE @BatchCount INT;
SELECT @BatchCount  = COUNT(1) FROM #DHDID

DECLARE @Counter INT = 1

WHILE( @Counter <= @BatchCount)
BEGIN

BEGIN TRANSACTION

DECLARE @ID INT;

SELECT @ID = DHDID FROM #DHDID WHERE ID = @Counter

DELETE FROM <MYTABLE> WHERE [PrimaryKey] = @ID

COMMIT TRANSACTION

SET @Counter = @Counter + 1

END
4

2 回答 2

2

根据您的回答,您应该通过连接进行基于集合的删除。尝试这样的事情:

Begin Tran
Delete m
    From <MyTable> m
        Inner Join DHDID d
            on d.DHDID = m.[PrimaryKey]

-- error detection code here
If <an error occurred>
    Rollback
Else
    Commit
于 2018-05-12T13:06:46.460 回答
1

我会尝试在#DHDID 表上创建索引:

CREATE NONCLUSTERED INDEX [idx] ON [#DHDID] ([ID] ASC) INCLUDE ([DHDID])
于 2018-05-12T13:13:14.003 回答