foo
(他の20の中で)列bar
を持つテーブルがbaz
ありquux
、インデックスがbaz
と にありquux
ます。テーブルには最大 50 万行あります。
以下のクエリの速度が大きく異なるのはなぜですか? クエリ A は 0.3 秒、クエリ B は 28 秒かかります。
クエリ A
select baz from foo
where bar = :bar
and quux = (select quux from foo where bar = :bar order by quux desc limit 1)
説明
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY foo ref quuxIdx quuxIdx 9 const 2 "Using where"
2 SUBQUERY foo index NULL quuxIdx 9 NULL 1 "Using where"
クエリ B
select baz from foo
where bar = :bar
and quux = (select MAX(quux) from foo where bar = :bar)
説明
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY foo ref quuxIdx quuxIdx 9 const 2 "Using where"
2 SUBQUERY foo ALL NULL NULL NULL NULL 448060 "Using where"
MySQL 5.1.34 を使用しています。