このクエリでキーを使用することを期待していました。このEXPLAINでキーが使用されないのはなぜですか?
mysql> DESCRIBE TABLE Foo;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | UNI | NULL | |
+-------+-------------+------+-----+---------+----------------+
mysql> EXPLAIN SELECT id FROM Foo WHERE name='foo';
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
fooがname
に一意のインデックスを持っているのに、なぜインデックスはSELECT
で使用されていませんか?
WHEREは常にfalseを返すためです。それはドキュメントにあります..また、あなたのテーブルには 'foo'と一致するレコードはありません。 MySQLは小さなテーブルにインデックスを使用しません。なぜなら、I/Oペナルティが発生しないためです。索引をたどることなくそのようなレコードがないと結論づけることができます。 –
http://dba.stackexchange.com/a/21265 – Drew