【问题标题】:How To Delete 200k Data With Specific User ID?如何删除具有特定用户 ID 的 200k 数据?
【发布时间】:2019-10-30 01:58:03
【问题描述】:

我目前是 Mysql 的新手,我接到了一项任务,即通过 phpmyadmin 实际删除 200,000 多个数据。

我实际上已经筛选了所有数据并从中提取了用户 ID,只是为了知道它不能像我想象的那样工作。通过使用此代码:

DELETE FROM User_data 

WHERE user_id IN ( 18852,22233,31257888,234414,555551....88884442);

我原以为它会一次删除所有 200k 数据,但它只删除了 5k 数据。

感谢您阅读本文!希望得到一些答复

已编辑:User_id 排序不正确

【问题讨论】:

  • 那么您是说删除语句确实完成了,但只删除了 5K 条记录,还是根本没有完成?
  • 嗨蒂姆,它确实完成了,但只删除了 5k 条记录

标签: mysql database phpmyadmin


【解决方案1】:

您可以尝试填充一个包含要删除的user_id 值的临时表,然后执行删除连接:

CREATE TEMPORARY TABLE user_ids (user_id INT PRIMARY KEY);
INSERT INTO user_ids (user_id)
VALUES
    (18852), (22233), (31257888), (234414), (555551), ..., (88884442);
-- or maybe load from CSV using LOAD DATA

DELETE u1
FROM User_data u1
INNER JOIN user_ids u2
    ON u1.user_id = u2.user_id;

现在,因为临时表中的user_id 列是主键,所以连接查找应该非常快(可能比您当前的WHERE IN 快​​一点)。另外,这解决了在查询中尝试传入过多IN 参数的问题。使用此解决方案,您根本不必这样做。

【讨论】:

  • 非常感谢蒂姆,它就像一个魅力。我没有使用临时表,而是创建了一个表并将数据加载到其中,因为要输入的内容太多。
【解决方案2】:

你可以试试这个

DELETE FROM User_data WHERE user_ID LIMIT 200000; 

【讨论】:

    【解决方案3】:

    你的 IN 子句有限制,检查max_allowed_packet

    您可以改为执行此查询。

    delete from User_data where user_ID <= 200000
    

    delete from User_data where user_ID order by id desc limit 200000
    

    或者(至少这个你有一个范围)

    delete from User_data where user_id between 18852 and 18853
    or user_id between 22233 and 22238
    or user_id between 555551 and 555553
    

    【讨论】:

      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 2013-10-13
      • 2010-12-07
      • 2011-11-04
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2013-08-19
      相关资源
      最近更新 更多