MySQL InnoDB でテーブル全体をロックしないようにする

mysqlで UPDATE をするときは、トランザクションを作るのが基本だが、 トランザクションを作るということは ロックがかかる

UPDATE する行が1行であれば、その行だけにロックをかける。それだけなら特に問題ないが、テーブル全体にロックがかかる場合がある。これはやばい

どんなときにテーブルロックが発生するか

  • INDEX が効かない UPDATE (すべての行を確かめる必要があるから)

テーブルロックを起こさないために

INDEX が効かない UPDATE は機械的に認識して、排除すればいいのでは・・

そもそも、広範囲に対して UPDATE ってどんな状況なのだろうか。すべて WHERE id = ? で統一できれば、優しい世界になると思うけど。

参考リンク

実際に InnoDB が何をロックしているか、等の見方が以下の記事にすべて書いてあって、とても良い