CREATE TABLE `course` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`), KEY `my_index` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;
使用查询:
explain select name from course where name='java';
结果:
+----+-------------+--------+------+---------------+----------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+----------+---------+-------+------+--------------------------+
| 1 | SIMPLE | course | ref | my_index | my_index | 52 | const | 1 | Using where; Using index |
+----+-------------+--------+------+---------------+----------+---------+-------+------+--------------------------+
如果name列没有索引的话,explain结果的extra列将是Using where,没有Using index。
接着使用id作条件查询:
explain select name from course where id=1;
explain select * from course where id=1;
结果是:
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | course | const | PRIMARY | PRIMARY | 4 | const | 1 | |
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------+
如果这样查询:
explain select id from course where id=1;
结果是:
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | course | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+----+-------------+--------+-------+---------------+---------+---------+-------+------+-------------+
问题:
同样是针对有索引的id(主键)和name列查询,extra列的结果不一样,前者查询id是extra 为空,如果查询整列或name列则是using index,即覆盖查询。后者不管查询什么,都是using where和using index.不清楚为什么。