我们应该在下面的示例中使用“LIMIT子句”吗?

时间:2013-08-18 10:53:11

标签: mysql performance limit myisam


There is a structure:
CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) unsigned NOT NULL DEFAULT '0',
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Query_1:
SELECT * FROM `categories` WHERE `id` = 1234 
Query_2:
SELECT * FROM `categories` WHERE `id` = 1234 LIMIT 1

我需要得到一排。由于我们应用WHERE id=1234(通过PRIMARY KEY查找)显然id = 1234的行在整个表中只有一个。
MySQL找到行后,是否引擎在使用Query_1时继续搜索?
提前谢谢。

1 个答案:

答案 0 :(得分:6)

请看这个SQLFiddle:http://sqlfiddle.com/#!2/a8713/4,特别是查看执行计划

你看,MySQL识别PRIMARY列上的谓词,因此如果添加LIMIT 1则无关紧要。

PS:更多解释:查看执行计划的列。这个数字是列数,查询引擎认为,它必须检查。由于列内容是唯一的(因为它是主键),因此将其与此进行比较:http://sqlfiddle.com/#!2/9868b/2相同的模式但没有主键。这里表示8.(执行计划在德语MySQL参考中解释,http://dev.mysql.com/doc/refman/5.1/en/explain.html英语版本由于某种原因没有那么详细。)