MySQLバージョン5.5.28を使用して、
私はそのように定義されたテーブルを持っています:
CREATE TABLE IF NOT EXISTS `groups` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL,
`desc` text NOT NULL,
`permissions` varchar(80) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
ご覧のとおり、非常に簡単です。idフィールドに主キーがあります。今、私は次のようなものを使用してそれに対してクエリを実行します。
SELECT permissions FROM groups WHERE id IN ('9', '8', '6','14','11','7','5');
残念ながら、キーの使用を拒否し、遅いクエリログに表示されます。
EXPLAINを実行すると、次のことが可能になります。
mysql> EXPLAIN SELECT permissions FROM groups WHERE id IN ('9', '8', '6','14','11','7','5');
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | groups | ALL | PRIMARY | NULL | NULL | NULL | 16 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
テーブル全体で20行未満しかないため、インデックスを使用しない可能性が高い理由がわかります。しかし、なぜこれがMySQLの「遅いクエリ」になるのでしょうか。