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

What is the fastest procedure to remove duplicates from a big table in MySQL

我在 MySQL 中有一个 table(5000 万行)新数据不断插入。

此 table 具有以下结构

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. KEY channel_date_index (channel_id,date_time)更改为UNIQUE (channel_id,date_time)
  2. INSERT 更改为 INSERT ... ON DUPLICATE KEY UPDATE ... 以在该对存在时更改时间戳。

要修复现有的 table,您可以 ALTER IGNORE TABLE ... ADD UNIQUE(...)。但是,这不会为您提供最新的时间戳。

为了最短停机时间(不是最大速度),请使用 pt-online-schema-change。