首頁 >資料庫 >mysql教程 >如何在保留單一實例的同時有效地從 MySQL 表中刪除重複行?

如何在保留單一實例的同時有效地從 MySQL 表中刪除重複行?

Patricia Arquette
Patricia Arquette原創
2025-01-23 13:31:14753瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn