mariaDB データベースで大規模なデータセットを操作しています。 2 つのテーブルがあり、テーブル A には 5,700 万行が含まれ、テーブル B には約 500 行が含まれています。テーブル B は、テーブル A の列に関連する ID のサブセットです。 AテーブルBの行をすべて削除したいです。
テーブル A の例:
分類_id
###名前###
20
メルセデス
30
川崎
80
ライツ
70
HP
テーブル B の例:
分類_id
###タイプ###
20
###車###
30
###自転車###
40
###バス###
50
###ボート###
したがって、この例では、テーブル A の最後の 2 行が削除されます (または、最初の 2 行のみを含むミラー化されたテーブルが作成されますが、これでも問題ありません)。
フィルター処理されたテーブルに含まれる行数が比較的少ないとのことなので、元のテーブル A と同じ列と条件に一致する行を含む別のテーブルを作成し、その行を置き換えるのが最善の選択肢です。元のテーブルを削除してください。また、この ID 数では、結合の代わりに WHERE IN () を使用することもできます。そこで使用するフィールドにインデックスが付けられている限り、通常は way em> になります。もっと早く。すべてを一緒に入れて: ###
リーリー
A にインデックスまたは外部キーがある場合、これらはコピーされないため、手動で再作成する必要があります。最初に SHOW CREATE TABLE A を実行し、その構造をメモしておくことをお勧めします。あるいは、SHOW CREATE TABLE A の出力をテンプレートとして使用してテーブル new_A を明示的に作成し、代わりに INSERT INTO new_A SELECT ... を実行することを検討することもできます。 code>CREATE TABLE new_A AS SELECT ... を実行し、その後は同じクエリを使用します。