質問: UPDATE、SELECTで共に同一のテーブルの同一の主キーを指定したWHERE検索をEXPLAINで行ったところ、 SELECTに関してはtype値がconstになり、 UPDATEに関してはtype値がrangeになりました。 その他の違いといえば、UPDATEの場合はExtra値がUsing whereになるだけで、他は特に差異がありません。 UPDATEで変更する列にインデックスを作成してみても(WHEREで指定する列も含め)、やはりconstにはなりませんでした。 なぜこのような違いが発生するのでしょうか? また、UPDATEステートメントでもtype値をconstにするためにはどのようにすればよいでしょうか? よろしくお願いいたします。
回答: そもそもUPDATEをEXPLAINする必要があるかどうかはおいとくとして (一般的な環境ではエラーになる?) SELECTは単純にレコードをズバリ指定できればconstになりますが、 UPDATEは1レコードだけみればよいのではなくインデックスやユニークなどの 属性も含めて処理するからrangeになるのではないかと勝手に思っています そういうものだと思うしかないような・・・