可能重复:
DELETE Command is too slow in a Table with Clustered Index
我在SQL Server 2005数据库上运行了以下DELETE
查询:
DELETE
pa
FROM
dbo.ProductAttribute pa
INNER JOIN
dbo.Product p ON pa.ProductID = p.ProductID
INNER JOIN
@UpdatedProducts up ON p.ProductID = up.ProductId
LEFT JOIN
dbo.ProductOption pos ON pa.ProductOptionID = pos.StartProductOptionId
LEFT JOIN
dbo.ProductOption pof ON pa.ProductOptionID = pof.FinishProductOptionId
WHERE
p.ProductTypeID = 1
AND
pos.StartProductOptionId IS NULL
AND
pof.FinishProductOptionId IS NULL
此查询需要很长时间才能执行我的数据集(约18分钟)。
以下是一些背景信息:
@UpdatedProducts
是一个包含~90K行DELETE
查询正在影响~3K行到目前为止,我的调查结果如下:
@UpdatedProducts
(由于它的大小) - 这没什么区别。SELECT
时,它运行得非常快(几秒钟)。所以我不确定我的JOIN
是否存在问题,因为在执行SELECT
或DELETE
时这可能会有同样的问题?FK
个约束需要验证才能让DELETE
成功 - 基本上我们需要确保dbo.ProductOption
中没有更多的条目引用我们尝试在dbo.ProductAttribute
中删除的行(这是IS NULL
子句中的WHERE
检查所检查的行。)有关如何加快此查询的任何建议?