ホームページ > データベース > mysql チュートリアル > 主キーのない大規模な SQLite テーブルの重複行を効率的に削除するにはどうすればよいですか?

主キーのない大規模な SQLite テーブルの重複行を効率的に削除するにはどうすればよいですか?

DDD
リリース: 2025-01-05 13:20:41
オリジナル
195 人が閲覧しました

How to Efficiently Delete Duplicate Rows in a Large SQLite Table Without a Primary Key?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート