I have a table foo
with (among 20 others) columns bar
, baz
and quux
with indexes on baz
and quux
. The table has ~500k rows.
Why do the following to queries differ so much in speed? Query A takes 0.3s, while query B takes 28s.
Query A
select baz from foo
where bar = :bar
and quux = (select quux from foo where bar = :bar order by quux desc limit 1)
Explain
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"
Query B
select baz from foo
where bar = :bar
and quux = (select MAX(quux) from foo where bar = :bar)
Explain
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"
I use MySQL 5.1.34.