表 data_content_152 500 萬行,實際唯一身份證號(SFZHM)僅 180 萬,需高效去重。
CREATE TABLE tmp3 AS SELECT MIN(id) AS col1 FROM data_content_152 GROUP BY SFZHM;
利用主鍵 id 自增特性,MIN(id) 代表最早插入的記錄。
CREATE TABLE `res` ( `id` INT(11), `sfz` CHAR(20) ) ENGINE=MyISAM;
INSERT INTO res (sfz) SELECT d.sfzhm FROM data_content_152 d JOIN tmp3 t ON d.id = t.col1;
GROUP BY SFZHM 走索引(需建立 SFZHM 索引)MIN(id) 聚合函數無需回表tmp3 僅 180 萬行,JOIN 極快| 方法 | 耗時 | 缺點 |
|---|---|---|
NOT IN / NOT EXISTS | 極慢 | 子查詢執行計劃差 |
DELETE ... JOIN | 慢 | 大事務、鎖表、binlog 膨脹 |
| 新表導入法(本文) | ~10 分鐘 | 需雙倍磁碟空間、業務切換窗口 |