我有一个 mariaDB 数据库,其中包含有关用户设备的详细信息(类似于 VPN 访问的“允许设备”列表)。回到项目开始时,对允许使用的设备没有限制,所以每个人都有 2 台设备注册到他们的名下。我的任务是从数据库中删除旧设备。这是一个简化的数据库模式:
用户 ID|注册日期|唯一 ID
12345|12-08-2020|ABC123
12345|11-05-2020|XYZ789
23455|20-08-2020|QWE345
要求是我必须删除旧设备,以防用户有两台设备。所以在这个例子中,属于用户 12345 的 deviceID XYZ789 需要被删除。
我到目前为止是这样的:
select min(RegisterDate), UserID from DeviceDetails where RegisterDate in (select RegisterDate from DeviceDetails) group by UserID having count(*) > 1;
我知道这非常复杂,而且肯定有改进的余地,因为在大约 14k 行上运行大约需要 3 分钟。
下一步是将这些行导出到日志中,然后删除。
我不是真正的 DB 人,但是当我们从以前的供应商那里继承了这个产品时,它的任务就交给了我,而且到目前为止它还可以正常工作。
数据库详细信息:
mysql Ver 15.1 Distrib 5.5.56-MariaDB,适用于 Linux (x86_64),使用 readline 5.1
CentOS 1810
过时了,是的,但这个决定超出了我的工资等级。
这工作得非常快,而且 14 k 不是那么多数据
你应该添加一个唯一的约束,
UserID
这样你就不必再次运行它db<>在这里摆弄
删除重复项的另一种常见方法是在其自身上加入表: