从MySQL表中删除大量行非常慢

时间:2019-01-26 15:17:14

标签: mysql

我的TABLE包含大约6列和大约1000万行。一列包含大约500万行,单词“ M-0”,其余500万行,单词“ M-1”。我尝试索引此列,然后删除包含单词“ M-1”的行。但是,这花费了很长时间。 有没有一种方法可以更快地做到这一点。

列的名称为“距离”。该表的代码如下:

CREATE TABLE MI_STAT_CONS_DHO (
  `Event` TEXT,
  `Event Description` TEXT,
  `Validated` CHAR(1),
  `Distance` CHAR(3),
  `Supplier Hub Group` TINYTEXT,
  `Special Project Flag` TINYTEXT
);

CREATE INDEX MI_STAT_CONS_DHO_DISTANCE_INDEX
ON MI_STAT_CONS_DHO (`Distance`);

DELETE FROM MI_STAT_CONS_DHO WHERE `Distance` = 'M-1';

1 个答案:

答案 0 :(得分:2)

如果您有这么多需要删除的数据

我建议您:

  1. 使用将保留的数据创建新的临时表。
  2. 截断主表
  3. 将数据从临时表移至主表

  1. 使用将保留的数据创建新的临时表。
  2. 删除主表
  3. 将Temp表重命名为主表(不要忘记创建约束)

CREATE TABLE TMP_MI_STAT_CONS_DHO
   SELECT * FROM MI_STAT_CONS_DHO WHERE `Distance` = 'M-0';

TRUNCATE TABLE MI_STAT_CONS_DHO ;

INSERT INTO MI_STAT_CONS_DHO 
  SELECT * FROM MI_STAT_CONS_DHO;

DROP TABLE TMP_MI_STAT_CONS_DHO;
相关问题