mysql - 如何从具有超过 10 万条记录的数据库中删除重复的电子邮件?
问题描述
我有一个大约 126K 条目的数据库,它有许多条目具有重复的电子邮件。我想删除所有具有重复条目的条目,只保留最早创建的条目。
我尝试使用以下查询,但它需要永远并且最大化我的服务器带宽。
任何人都可以帮忙吗?
DELETE n1 FROM table n1, table n2 WHERE n1.ID > n2.ID AND n1.email = n2.email
数据库规范
- PhpMyAdmin 版本信息:3.5.3
- 服务器:通过 UNIX 套接字的 localhost
- 软件:MySQL
- 软件版本:5.0.67-community - MySQL 社区版 (GPL)
- 协议版本:10
- 服务器字符集:UTF-8 Unicode (utf8)
解决方案
也许您可以创建一个包含唯一电子邮件的临时表,然后删除数据库中不止一次的所有电子邮件。
CREATE TEMPORARY TABLE tab_temp
SELECT * FROM table GROUP BY email;
然后
DELETE FROM table
WHERE id NOT IN ( SELECT id FROM tab_temp );
有了它,您可以删除那些重复的
推荐阅读
- automapper - 调用 AutoMapper 的 Persist().InsertOrUpdate() 时“没有可用的构造函数”
- python - 每次有人使用命令时如何计算?
- python - 使用python中的相对路径寻址到上层目录
- r - 未能在 R 中使用 ggmap 和 Google Geocoding API 进行地理编码;在公司防火墙后面
- r - 在R中如何转义变量中的单个',然后将其发送到sqlQuery
- c# - 如何根据组合框wpf中的用户输入显示数据
- error-handling - 使用规划器运行问题文件时出现“未声明的要求”错误
- ruby-on-rails - 自动为用户设置密码 - 无需设计
- php - 将缺货库存状态添加到 Woocommerce 可变产品下拉列表
- ruby-on-rails - 收到证书后意外生成新的 openssl 密钥