SQLite データベースでの重複行削除の最適化
質問:
SQLite3 で 3,600 万行を超える大規模なテーブルに遭遇すると、次のような問題に直面します。 2 つの列 (ハッシュと d) に基づいて重複レコードを削除するという課題。ただし、テーブルには主キー列が存在しないという問題があります。効率的なソリューションを求めて、このタスクに取り組むための最も効果的なアプローチについて問い合わせます。
答え:
主キーがない場合に重複行を効果的に削除するには、各レコードに一意の識別子が必要です。
解決策:
SQLite3 の特別な ROWID 列を一意の識別子として利用します。 rowid 列は、テーブルに新しい行が追加されるたびに自動的に増加する整数です。 rowid を使用すると、各 (hash, d) の組み合わせの最小の rowid 値を持つレコードを保持できます。
SQL クエリ:
目標を達成するには、次の SQL クエリを実装します。
DELETE FROM YourTable WHERE rowid NOT IN ( SELECT MIN(rowid) FROM YourTable GROUP BY hash, d )
このクエリは、重複する (ハッシュ、d) 組み合わせを持つすべての行を識別して削除し、インスタンスが 1 つだけになるようにします。各組み合わせはテーブルに残ります。 MIN(rowid) サブクエリは、重複レコードの場合、最小の rowid 値を持つレコードが確実に保持されるようにします。
以上が主キーのない大規模な SQLite テーブルの重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。