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

abd*_*mir 4 mysql performance myisam limit


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
Run Code Online (Sandbox Code Playgroud)

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

con*_*ned 6

看看这个SQLFiddle:http://sqlfiddle.com/#!2/a8713/4 ,尤其是View Execution Plan.

你看,MySQL识别PRIMARY列上的谓词,因此无论你是否添加LIMIT 1都没关系.

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