首页 > 数据库 > mysql教程 > 如何在保留单个实例的同时有效地从 MySQL 表中删除重复行?

如何在保留单个实例的同时有效地从 MySQL 表中删除重复行?

Patricia Arquette
发布: 2025-01-23 13:31:14
原创
745 人浏览过

How to Efficiently Remove Duplicate Rows from a MySQL Table While Preserving a Single Instance?

高效删除 MySQL 中的重复行

场景: MySQL 表中的重复行可能由多种来源引起,包括数据输入错误。 删除这些重复项对于维护数据完整性和最佳数据库性能至关重要。

问题:挑战在于删除每个重复行中除一个实例之外的所有实例。

解决方法及注意事项:

重要提示:在执行任何 DELETE 查询之前始终备份表。 错误执行的 DELETE 语句可能会导致不可逆转的数据丢失。

方法一:保留ID最小的行

此方法保留 ID 值最小的行:

<code class="language-sql">DELETE n1
FROM names n1, names n2
WHERE n1.id > n2.id AND n1.name = n2.name;</code>
登录后复制

方法2:保留ID最大的行

此替代方案保持具有最大 ID 值的行:

<code class="language-sql">DELETE n1
FROM names n1, names n2
WHERE n1.id < n2.id AND n1.name = n2.name;</code>
登录后复制

提高大型表的效率:

对于非常大的表,以下INSERT ... SELECT DISTINCT方法提供了更有效的解决方案:

<code class="language-sql">CREATE TEMPORARY TABLE tempTableName AS
SELECT DISTINCT cellId, attributeId, entityRowId, value
FROM tableName;

TRUNCATE TABLE tableName;

INSERT INTO tableName SELECT * FROM tempTableName;

DROP TEMPORARY TABLE tempTableName;</code>
登录后复制

这将创建一个仅包含唯一行的临时表,截断原始表,然后使用临时表中的唯一数据填充它。 对于大型数据集,这通常比使用 DELETE 更快。 请记住将 tableNamecellIdattributeIdentityRowIdvalue 替换为您的实际列名称。

以上是如何在保留单个实例的同时有效地从 MySQL 表中删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板