当前位置: 首页 > news >正文

mysql/doris如何高效删除历史数据

分区删除 (TRUNCATE PARTITION) ★首选推荐★‌
若历史数据是按时间分区(如日期、月份)存储的,这是最高效的方式。它直接删除整个分区的物理数据文件并更新元数据,避免逐行扫描和删除标记操作。
语法示例‌:TRUNCATE TABLE table_name PARTITION (p202301, p202302);
‌优势‌:秒级完成,资源消耗极低。
‌前提‌:必须预先根据时间周期建立分区。

‌使用删除标记 (Delete Sign) ★高吞吐场景推荐★‌
适用于 Unique Key 主键模型表,尤其适合需要频繁、大批量删除少量数据的场景(如 CDC 同步)。通过导入包含删除标记的数据行实现“逻辑删除”。
‌原理‌:在导入数据时指定特殊字段值(如 DORIS_DELETE_SIGN=true),系统自动合并时删除对应主键数据
‌优势‌:可与其他数据导入合并进行,效率远高于逐行执行 DELETE 语句。
‌适用场景‌:实时同步包含删除操作的 binlog 流

条件删除 (DELETE WHERE) ★精准删除时慎用★‌
传统 DELETE 语法允许按条件删除特定行数据。

‌语法示例‌:DELETE FROM table_name PARTITION partition_name WHERE create_date < '2024-01-01'; 

‌局限性‌:
是同步操作,会启动独立的删除作业
删除大量数据时,需扫描相关数据并生成大量删除标记,后续Compaction合并时才真正物理删除,资源消耗大且存在延迟
‌建议‌:仅用于删除少量、分散的历史数据,避免高频或大批量使用

整表删除 (TRUNCATE TABLE) ★清空重置时使用★‌
当需要删除表中所有数据(全部历史数据)并保留表结构时使用。
‌语法‌:TRUNCATE TABLE table_name;
‌优势‌:比逐行删除或删除所有分区更快。

‌利用临时分区实现原子覆盖写 ★重写历史数据时推荐★‌
适用于需要‌完全替换‌某个历史分区数据的场景。先在临时分区导入新数据,再用原子操作替换原有分区:

ALTER TABLE table_name REPLACE PARTITION (p202301) WITH TEMPORARY PARTITION (tp_temp);
‌优势‌:替换操作瞬间完成,避免删除旧数据和导入新数据期间的数据不可见窗口期

对于未创建分区的 Doris 表,首选方案:改造表结构添加分区

1.创建新分区表
CREATE TABLE new_table (... -- 原表字段
) PARTITION BY RANGE(dt)( ... ) -- 按时间分区
DISTRIBUTED BY ...;
2.迁移有效数据
使用 INSERT INTO new_table SELECT ... FROM old_table WHERE dt >= '保留起始时间' 迁移需保留的数据3.后续可直接通过 TRUNCATE PARTITION 秒级删除过期分区
http://www.dtcms.com/a/320834.html

相关文章:

  • SimpleMindMap:一个强大的Web思维导图
  • 【性能测试】-2- JMeter工具的使用
  • 文件结构树的├、└、─ 符号
  • 数据仓库知识
  • apache cgi测试
  • 【FastExcel】解决ReadSheet在Map中获取对象不准确问题(已提交PR并合并到开源社区)
  • SARSA算法详解:从实践到理论的全面解析
  • 软件包管理、缓存、自定义 YUM 源
  • selenium SessionNotCreatedException问题解决办法
  • 讲一讲@ImportResource
  • NFS/SMB 共享目录
  • HTML应用指南:利用GET请求获取全国Apple Store 零售店位置信息
  • Dify + Ragflow的部署与服务体系
  • 【数据结构】哈希扩展学习
  • Zoho CRM API 配置和使用
  • Pytest项目_day10(接口的参数传递)
  • 创始人 IP 打造的 “内容 + 商业” 双体系
  • Redis数据组织方式
  • 20250808:EasyGBS 对接大华 ICC 平台问题处理
  • 使用Prometheus + Grafana + node_exporter实现Linux服务器性能监控
  • zookeeper3.8.4安装以及客户端C++api编译
  • WebForms 实例
  • 如何在Vue中使用拓扑图功能
  • 【深度学习计算性能】02:异步计算
  • 【入门级-C++程序设计:9、函数与递归-传值参数与传引用参数】
  • 数据持久化 —— `chrome.storage` 的记忆魔法
  • 服务器硬件电路设计之I2C问答(一):为什么I2C总线要加上拉电阻?
  • 华为USG防火墙双机,但ISP只给了1个IP, 怎么办?
  • WinForm 对话框的 Show 与 ShowDialog:阻塞与非阻塞的抉择
  • Java机密计算新维度:基于AMD SEV-ES的Enclave数据湖安全架构