4

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 时继续搜索?
提前致谢。

4

1 回答 1

6

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

您会看到,MySQL 识别 PRIMARY 列上的谓词,因此添加LIMIT 1与否都没有关系。

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

于 2013-08-18T11:02:19.493 回答