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时继续搜索?
提前谢谢。
答案 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英语版本由于某种原因没有那么详细。)