删除操作很慢,重建索引似乎无法解决问题

Delete operation is slow and rebuilding index doesn't seems to solve the issue

我有一个简单的删除查询:

Delete from sales
where ImportLogId = @ImportLogid

ImportLog table 有大约 300 万条记录,包含所有日志详细信息。

我在 ImportLogID table 的 ImportLogID 上创建了非聚集索引。

碎片率低于 10%,但查询仍然需要更多时间来执行,但当我手动重建索引时,它会在一秒钟内执行。一天后同样的问题重复出现。 使用代码重建索引似乎没有帮助,但在 SQL 服务器 UI 中重建索引有帮助。

使用 SQL 查询和手动使用 UI 重建索引有什么区别? 为什么碎片较少的索引也需要更多的时间来执行,而当我重建索引时它会在一秒钟内执行?

寻找更好的解决方案

没错。所以你的问题不是记录的删除,这是瞬间的。 (84 行)。问题是之后对 WholesalerSale table 的扫描。

我的猜测是,ImportSale.Id 是 WholesalerSale 中的外键,而 SqlServer 只是验证您没有删除引用的键。

解决方案是在 WholesalerSale 中索引您的外键列以加快此检查。

CREATE INDEX IX_WholesalerSale_ImportSaleId ON WholesalerSales (ImportSaleId);