2013-08-18 50 views
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時繼續搜索?
在此先感謝。我們應該在下面的例子中使用「LIMIT子句」嗎?

回答

6

看看這個SQLFiddle:http://sqlfiddle.com/#!2/a8713/4特別是查看執行計劃

您會發現,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英文一個是因爲某種原因不太詳細。)

相關問題