0

以下の sql クエリを実行しようとしていますが、しばらく待っていると 505 エラーが発生します。wp_posts テーブルには 50,000 行をはるかに超える行が保持されています...目的は、約 50,000 行の重複投稿を削除することです

DELETE bad_rows.*
FROM wp_posts AS bad_rows
INNER JOIN 
(
     SELECT post_title, MIN(id) as min_id
     FROM wp_posts
     GROUP BY post_title
     HAVING count(*) > 1
) AS good_rows 
ON good_rows.post_title = bad_rows.post_title
AND good_rows.min_id <> bad_rows.id;

これを最適化して実行する方法について何か考えはありますか?

4

1 に答える 1

4

サブクエリを使用する必要があるとは思わないでください。これにより、同じタイトルの投稿のすべてのペアが選択されます。

SELECT a.id, b.id
FROM wp_posts a
LEFT JOIN wp_posts b 
ON a.post_title = b.post_title
WHERE a.id > b.id

最も古い投稿を残したい場合は、id が a.id の投稿をすべて削除してください。最新の投稿を残したい場合は、id が b.id の投稿をすべて削除してください。


したがって、最も古い投稿を保持するには:

DELETE FROM wp_posts a
LEFT JOIN wp_posts b 
ON a.post_title = b.post_title
WHERE a.id > b.id

最新の投稿を保持するには:

DELETE FROM wp_posts a
LEFT JOIN wp_posts b 
ON a.post_title = b.post_title
WHERE a.id < b.id
于 2012-06-09T02:13:56.460 に答える