首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

MySQL查询explain extra纳闷

2012-11-07 
MySQL查询explain extra疑惑CREATE TABLE `course` (`id` int(10) NOT NULL AUTO_INCREMENT,`name` varcha

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.不清楚为什么。

?

?

?

?

?

?

?

?

?

?

?

?

?

热点排行