我有一个表foo
,其中包含(以及其他 20 个)列bar
,baz
并且quux
索引在baz
和上quux
。该表有约 500k 行。
为什么以下查询的速度差异如此之大?查询 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。