【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について