我在下面有这个查询:
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的索引?
答案 0 :(得分:0)
正在进行表扫描,因为您要求所有匹配的行。添加WHERE a.id = <any id>
,它应该使用索引。
答案 1 :(得分:0)
当您请求所有记录时,它需要对至少一个表执行完整扫描。听起来像是选择了table_1。该索引应该在table_2上使用。
如果另外添加where子句,则可以避免该表扫描。但如果您确实需要所有行,那么扫描是获取它们的最快方式。