【SQL】WHERE句は演算子で条件をつけなくても良い
前提
- テーブル内の全レコード数を取得したかった。
id
がPRIMARY
キー- 途中で
DELETE
されてるレコードもあるのでid
が不連続となっている。- そのため、
ORDER BY id DESC LIMIT 1
でid
の値がそのままレコード数というわけにもいかなかった。
- そのため、
概要
今まで WHERE
句には id=1
だったり演算子を使って条件を設定しないと使えないと思っていたが、 WHERE id
とするだけで使えるようで、非常にクエリが軽くなった。
WHEREありバージョン
実行したSQLとEXPLAINの結果
EXPLAIN SELECT count(id) FROM samples WHERE id
array (size=10) 'id' => int 1 'select_type' => 'SIMPLE' 'table' => 'samples' 'type' => 'range' 'possible_keys' => 'PRIMARY' 'key' => 'PRIMARY' 'key_len' => '8' 'ref' => null 'rows' => 5852957 'Extra' => 'Using where; Using index'
WHEREなしバージョン
実行したSQLとEXPLAINの結果
EXPLAIN SELECT count(id) FROM samples
array (size=10) 'id' => 1 'select_type' => 'SIMPLE' 'table' => 'samples' 'type' => 'index' 'possible_keys' => null 'key' => 'samples_index' 'key_len' => '161' 'ref' => null 'rows' => 11705913 'Extra' => 'Using index'
参考
EXPLAINについて