【发布时间】: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 faces和explain delete from faces ... rest of your delete的输出 -
show create table faces:CREATE TABLE
faces(Face_IDint(11) NOT NULL AUTO_INCREMENT,X1int(11) DEFAULT NULL,X2int(11) DEFAULT NULL,Y1int(11) 默认空值,Y2int(11) 默认空值,Person_IDint(11) 默认空值,Picture_IDint(11) 非空值,FilePath文本默认空值,主键 (Face_ID), KEYFK__people(Person_ID), KEYFK_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