INNER JOIN的查询优化

时间:2011-10-24 19:10:53

标签: mysql indexing

我在下面有这个查询:

SELECT a.id, b.item_name 
FROM table_1 as a 
INNER JOIN table_2 as b on a.item_id = b.item_id

a.bid上的索引为主要索引,a.item_id上有索引,b.item_id上的索引为b.item_name上的主要和索引

然而,当我通过EXPLAIN运行查询时,主表变为table_1并且没有索引使用,因此它进行全面扫描。为什么不加入b.item_id的索引?

2 个答案:

答案 0 :(得分:0)

正在进行表扫描,因为您要求所有匹配的行。添加WHERE a.id = <any id>,它应该使用索引。

答案 1 :(得分:0)

当您请求所有记录时,它需要对至少一个表执行完整扫描。听起来像是选择了table_1。该索引应该在table_2上使用。

如果另外添加where子句,则可以避免该表扫描。但如果您确实需要所有行,那么扫描是获取它们的最快方式。