从MySQL中的大表中删除重复项的最快程序是什么

时间:2015-03-30 15:58:30

标签: mysql insert bigdata

我在MySQL中有一个表(5000万行),新数据会定期插入。

此表具有以下结构

CREATE TABLE values (
    id double NOT NULL AUTO_INCREMENT,
    channel_id int(11) NOT NULL,
    val text NOT NULL,
    date_time datetime NOT NULL,
    PRIMARY KEY (id),
    KEY channel_date_index (channel_id,date_time)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

两行必须永远不会有重复的channel_id和date_time,但如果发生此类插入,则保持最新值非常重要。

是否存在在插入之前实时检查重复项的过程,还是应该在定期检查不同周期中的重复性时继续插入所有数据。

实时速度在这里很重要,因为每秒会发生100次插入。

1 个答案:

答案 0 :(得分:1)

防止 future 重复:

  1. KEY channel_date_index (channel_id,date_time)更改为UNIQUE (channel_id,date_time)
  2. INSERT更改为INSERT ... ON DUPLICATE KEY UPDATE ...以更改该对存在时的时间戳。
  3. 要修复现有表格,您可以执行ALTER IGNORE TABLE ... ADD UNIQUE(...)。但是,这不会给你最新的时间戳。

    要获得最短停机时间(不是最高速度),请使用pt-online-schema-change。

相关问题