【问题标题】:High Logical Reads高逻辑读
【发布时间】:2019-07-09 09:15:58
【问题描述】:

我在同一张表上运行 SELECT 和 DELETE 操作,但在这两种操作中,逻辑读取方式不同,因此该查询在删除数据时花费了更多时间。你能帮我减少删除操作中的逻辑读取吗?

表格有超过 1.9 亿行,它将保留昨天的 90 天数据。

我在制作 SP 时遇到了这个问题,它将每天删除 1 天的数据(最旧的数据)

我已经检查并完成了必要的索引,我也尝试过禁用索引,但时间仍然要长得多。

选择查询:

SELECT *
FROM [db_name].dbo.[table_name] ldt
WHERE ldt.[DATE]='2019-03-26'

删除查询:

DELETE FROM [db_name].dbo.[table_name]
WHERE [DATE]='2019-03-27'

SELECT 操作的逻辑读取数为:60,383,查询处理时间为 00:00:32.851
DELETE 操作的逻辑读取数为:64,516,671,查询处理时间为 00:10:27.902(预计时间不到一分钟)

【问题讨论】:

  • SO 的离题 - 属于 dba。而且不知道表的DDL,不看执行计划,谁也帮不上忙。如果表有触发器或索引视图,则包括这些。

标签: sql-server tsql sql-delete query-performance


【解决方案1】:

你看过带有文件摸索的表分区吗?如果您可以在数据上创建分区,则可以截断特定分区而不是删除它。

【讨论】:

  • 分区不适合我,因为我必须在上述表格中的运行窗口上保留 90 天。此外,在执行删除操作之前禁用非聚集索引而不是重建它们会有所帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
相关资源
最近更新 更多