【问题标题】:Delete records using HeidiSQL based on count基于计数使用 HeidiSQL 删除记录
【发布时间】:2021-01-29 12:32:27
【问题描述】:

我不小心在一个表中创建了大量 (500K+) 不正确的记录。 该表将 Face_ID 作为唯一键,将 Picture_ID 作为外键。 我想删除与 Picture_ID 的相同值相关联的大量记录的所有记录。 以下查询完美且快速地运行:

Select Picture_ID, COUNT(*) From faces Group BY Picture_ID Having COUNT(*) > 1000

我尝试了以下方法,但事件执行 20 分钟后,查询仍在运行:

delete from faces where Picture_ID IN (Select Picture_ID From faces Group BY Picture_ID Having COUNT(*) > 1000)

即使我将数字(上例中为 1000)调整为仅找到 3 个 Picture_ID 值的值,每个值大约有 1000 条记录,查询仍然需要很长时间。 (坦率地说,这让我感到害怕——这让我想知道数据库完成后会剩下什么!)

在 Windows 10 上使用 HeidiSQL 和 MariaDB 最有效的编码方式是什么。

【问题讨论】:

  • 添加show create table facesexplain delete from faces ... rest of your delete的输出
  • show create table faces:CREATE TABLE faces (Face_ID int(11) NOT NULL AUTO_INCREMENT, X1 int(11) DEFAULT NULL, X2 int(11) DEFAULT NULL, Y1 int(11) 默认空值,Y2 int(11) 默认空值,Person_ID int(11) 默认空值,Picture_ID int(11) 非空值,FilePath 文本默认空值,主键 ( Face_ID), KEY FK__people (Person_ID), KEY FK_faces_pictures (Picture_ID) ENGINE=InnoDB AUTO_INCREMENT=706450 DEFAULT CHARSET=latin1
  • 我不确定你不明白哪一部分。我正在尝试根据选择的 Picture_ID 从表中删除记录。 Picture_ID 是根据与 faces 表中的 1,000 多条记录相关联的那些 Picture_ID 来选择的。
  • 你能显示 EXPLAIN 请求的输出吗? (编辑您的问题并添加它)应该揭示出了什么问题

标签: sql duplicates sql-delete query-performance mariadb-10.4


【解决方案1】:

我找到了答案:

删除一个 从面 加入 (从具有 COUNT(*) > 1000 的面孔 Group BY Picture_ID 中选择 Picture_ID)b ON a.Picture_ID = b.Picture_ID

它有效,而且速度很快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2022-01-13
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2013-09-07
    相关资源
    最近更新 更多