我使用的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
@Evgi阿哈,但它只是关于估计过程,对吗?面对面,mysql只会提到10行,这是真的吗? –
yes is true :) :) –
@Jakub,除非添加ORDER BY子句,这是通常的情况(否则,您的10行既不是随机也不是确定性的)。它需要检索所有匹配的行,以便对它们进行排序,即使它们最终不会发送到客户端。 –