2011-07-21 54 views
6

我使用的MySQL服务器版本5.5.14,现在我想这个简单的SQL查询使用EXPLAIN命令:mySQL命令说明忽略LIMIT?

EXPLAIN SELECT id, name, thumb FROM `twitter_profiles` LIMIT 10; 

,它显示了我这样的结果:

+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ 
| 1 | SIMPLE  | tp | ALL | NULL   | NULL | NULL | NULL | 40823 |  | 
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ 
1 row in set (0.02 sec) 

我的问题是,为什么它会扫描整个表,而不是像我在LIMIT子句中指定的那样取前10行?

非常感谢您的建议!

干杯,

的Jakub

回答

10

此文章的一个很好的链接有关MySQL EXPLAIN limits and errors

限制不同时,估计即使 的行数,如果你有限额,这限制了多少考虑行将被检查MySQL 仍将打印完整号码

+0

@Evgi阿哈,但它只是关于估计过程,对吗?面对面,mysql只会提到10行,这是真的吗? –

+1

yes is true :) :) –

+1

@Jakub,除非添加ORDER BY子句,这是通常的情况(否则,您的10行既不是随机也不是确定性的)。它需要检索所有匹配的行,以便对它们进行排序,即使它们最终不会发送到客户端。 –

-3

你需要使用订单..

EXPLAIN SELECT id, name, thumb FROM twitter_profiles ORDER BY LIMIT 10; 

希望这会帮助你。

+5

这甚至不是有效的SQL。 –