MySQL查询explain extra疑惑
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.不清楚为什么。
?
?
?
?
?
?
?
?
?
?
?
?
?