EXPLAINでUsing where
innodbをプライマリーキーで検索するクエリのEXPLAIN出力はすると以下のようになります。
mysql> EXPLAIN SELECT * FROM product WHERE プライマリーキー = ****; +----+-------------+-------------+-------+-------------------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------+-------+-------------------------+---------+---------+-------+------+-------+ | 1 | SIMPLE | product | const | ************* | PRIMARY | * | const | 1 | | +----+-------------+-------------+-------+-------------------------+---------+---------+-------+------+-------+
クラスタ化インデックスをスキャンしていると考えられ、問題ありません。
しかし、プライマリーキーを範囲指定してみると以下となります。
mysql> EXPLAIN SELECT * FROM product WHERE プライマリーキー > ****; +----+-------------+-------------+-------+-------------------------+---------+---------+-------+------+-----------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------+-------+-------------------------+---------+---------+-------+------+-----------+ | 1 | SIMPLE | product | range | ************* | PRIMARY | * | NULL | *** |Using where| +----+-------------+-------------+-------+-------------------------+---------+---------+-------+------+-----------+
範囲指定のクエリなので、typeがrangeになるのは理解できますが、「Using where」と出るのは何故でしょうか?
「Using where」は引っ張ってきたテーブルデータをフィルタしている認識です。
クラスタ化インデックスをプライマリーキーを使って検索した後、フィルタするものはないはずです。
「Using where」と出る理由を教えてください。
※MySQLのバージョンは5.5です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/11 04:31
2018/01/11 04:47