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

すべての行の1つの列の値を設定するのは非常に遅いです

    InnoDBで、update ステートメントは、スキャンするすべての行をロックします。つまり、200行を更新するには、350 000行レベルのロックを作成すると同時に、ロールバックロックを維持し、すでに変更された値を読み取っているトランザクションに以前の値を提供する必要があります(トランザクションはコミットされ、変更は最終的なものではありません)

    一方、MyISAMはテーブル全体をロックします。

    したがって、すべての行を更新する必要がある場合は、テーブル全体をロックすると、パフォーマンスが大幅に向上します(行レベルのロックは必要ありません)

    しかし、さらに良いことに、あなたが行ったようにWHERE句を提供すると、InnoDBは一致する行に対してのみロックを取得します(インデックスツリーのいくつかのギャップロックも同様ですが、これは問題の範囲外です)

    >

    1. ckeditorのコンテンツをmysqlデータベースに保存する方法

    2. データベースモデリング

    3. PostgreSQLのパフォーマンスに関するチートシート

    4. MySQLが存在しない場所に挿入/存在しない場合