sql-server - 高逻辑读
问题描述
我在同一个表上运行 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(预计时间不到一分钟)
解决方案
你看过带有文件摸索的表分区吗?如果您可以在数据上创建分区,则可以截断特定分区而不是删除它。
推荐阅读
- python - 将另一个函数的变量调用到外部函数
- database - 如何从 REDCap 中的另一个项目中获取数据
- python - 重塑矩阵
- c# - 在任何基于团队的(工作)项目中重用代码的正确方法是什么?
- dynamics-crm - 模型驱动的 PowerApps 中的正则表达式验证
- android - ListView.builder底部在颤动中按像素溢出
- javascript - 七个圆圈,但只有一个在改变颜色,为什么?
- jquery - jQuery; 验证 asp.net 文本框是否有 19 个字符长度并且是格式
- button - 复选框错误:位置参数太少:
- sql - 根据 SQL 中的多个参数过滤值(多行)