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

1行だけ取得する必要があります。適用WHERE id=1234(PRIMARY KEY による検索) しているため、明らかに id=1234 の行はテーブル全体で 1 つだけです。
MySQL が行を見つけた後、Query_1 を使用するときにエンジンが検索を続行するかどうか。
前もって感謝します。

4

1 に答える 1

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 リファレンスで説明されています

于 2013-08-18T11:02:19.493 に答える