2013-02-19 9 views
8

私は 'million_words'という単純なテーブルを持っています。これは、2つの列と1行を持っている - >のid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY &単語VARCHAR(50 NOT NULLEXPLAIN印刷時の余分なもの - 'constテーブルを読んだ後に気付かれなかった部分'

私はこのクエリを実行します - :。EXPLAIN SELECT * FROM million_words WHERE word = '-anon'

Extra列その後、印刷物:'Impossible WHERE noticed after reading const tables、たとえ行は明らかに表に存在している

いただきまし

答えて

12

wronf MySQLのドキュメントから:。

"constテーブルを読んだ後に気付いたことはありません"
MySQLはすべてのconst(およびシステム)テーブルを読み、WHERE句は常に偽であることに気付きました。テーブルは、クエリの開始時に読み取られる多くても1つの一致する行を有するthis


参照。 行が1つしかないため、この行の列の値は残りのオプティマイザによって定数と見なすことができます。 constテーブルは一度だけ読み込まれるため非常に高速です。

constは、PRIMARY KEYまたはUNIQUE indexのすべての部分を定数値と比較するときに使用されます。 this