sql >> データベース >  >> RDS >> Mysql

MySQLは、あるテーブルから別のテーブルにすべてのレコードを効率的にコピーします

    足りないものが1つだけあります。特に、InnoDBを使用している場合、SELECTステートメントにORDER BY句を明示的に追加して、行を主キー(クラスター化インデックス)の順序で挿入していることを確認しますか?

    INSERT INTO product_backup SELECT * FROM product ORDER BY product_id
    

    不要な場合は、バックアップテーブルのセカンダリインデックスを削除することを検討してください。これにより、サーバーの負荷も軽減されます。

    最後に、InnoDBを使用している場合は、必要な行ロックの数を減らし、両方のテーブルを明示的にロックするだけです。

    LOCK TABLES product_backup WRITE;
    LOCK TABLES product READ;
    INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
    UNLOCK TABLES;
    

    行のロックは非常に高速であるため(テーブルのロックほど高速ではありませんが)、ロックに関するものはおそらく大きな違いにはなりませんが、あなたが尋ねたので。



    1. SQLクエリでのタイムゾーン変換

    2. #1064-SQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルを確認してください

    3. ClusterControlが仮想IPを構成する方法とフェイルオーバー中に何を期待するか

    4. 同じIDの行を配列にマージします