CakePHP でid が PRIMARY KEY では無い時の注意

はまったので備忘録的に。

CakePHPのmodelを使って、レコードの削除をしてたんやけどどうもレスポンスが悪い。

 

Model の deleteAll メソッドに指定した検索条件のカラムににはちゃんとINDEXは貼ってあるけど

どうもINDEXが使われてないような感じがする。

 

で、MySQLの方で実際に発行されてるSQLを調べてみると

deleteAllがコールされた段階で SELECT とDELETE がセットで呼ばれてるようだ。

 

deleteAll に指定した検索条件で SELECT した後、その SELECT 結果から取得した id で DELETE をやってる。

普通に使ってるテーブルなら id はたいてい PRIMARY KEY になってるから気にしてなかったけど

今回のはログテーブルだったもんで id にINDEX 貼ってなかったのが原因だったようで…

 

id にINDEX追加したら無事爆速なレスポンスになったとさ。

コメントを残す

メールアドレスが公開されることはありません。