Impossible WHERE noticed after reading const tables
Explainの結果の中に見かけない出力を見つけたので調べました。
↑の記事によると、「ユニークキーを使って絞り込んだ後、データが見つからなかった場合に発生する」Extraのメッセージらしいです。
MySQLのドキュメントによりますと、
MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.8.2 EXPLAIN 出力フォーマット
仕事で使ってるのが5.7でなくてすみません...。さて、上記のリファレンスマニュアルによりますと、
Impossible WHERE noticed after reading const tables MySQL はすべての const (および system) テーブルを読み取り、WHERE 句が常に false であることを通知します。
ということらしい。ところで、constテーブルって何ということで、MySQLのリファレンスマニュアルをまためくると、
テーブルには、一致するレコードが最大で 1 つあり、クエリーの開始時に読み取られます。行が 1 つしかないため、この行のカラムの値は、オプティマイザの残りによって定数とみなされることがあります。const テーブルは、1 回しか読み取られないため、非常に高速です。
const は PRIMARY KEY または UNIQUE インデックスのすべてのパートを定数値と比較する場合に使用されます。次のクエリーでは、tbl_name は const テーブルとして使用できます。
SELECT * FROM tbl_name WHERE primary_key=1; SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;
ということで、PRYMARY_KEYやUNIQUEインデックスに指定した列からできているテーブルみたいなもの(それをindexと...(ry)なんだと思います。
それで、くだんのメッセージは、インデックスの列について、全部スキャンしたけど、インデックスの列の時点で全部falseだったので、これ以上WHEREを走らせることはできないよ、と言われているみたいです。