join不使用索引

时间:2014-05-08 18:31:32

标签: mysql

此查询大约需要1秒才能运行

select table2.name from table1 join table2 on table1.id = table2.id and table1.value='PCF973F00'

虽然这个需要大约80毫秒

select table2.name from table2 where id = (select id from table1 where table1.value = 'PCF973F00')

table1有大约500K行,table2大约有250K。 table1.idtable1.valuetable2.id都是单独的索引。两个id列都是uint,value是varchar 50.

两个查询的解释是

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  table1  ref value,id    value   52  const   1   Using where
1   SIMPLE  table2  ALL id  NULL    NULL    NULL    240858  Using where; Using join buffer

和     id select_type表类型possible_keys键key_len ref rows Extra

1   PRIMARY table2  ref id  id  4   const   1   Using where
2   SUBQUERY    table1  ref value   value   52  NULL    1   Using where

表格定义:

CREATE TABLE `table1` (
  `id` int(10) unsigned NOT NULL,
  `source_id` mediumint(7) unsigned NOT NULL,
  `type` varchar(20) NOT NULL,
  `value` varchar(50) NOT NULL,
  KEY `value` (`value`),
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `table2` (
  `id` int(10) unsigned NOT NULL,
  `name` varchar(50) NOT NULL,
  KEY `name` (`name`),
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

所以我的问题是,为什么MySQL不使用table1.value上的索引优化第一个查询,然后通过两个表'id列上的索引加入?

0 个答案:

没有答案