为什么Mysql在加入另一个表B时对表A使用全表扫描?

时间:2014-06-07 10:18:47

标签: mysql join left-join inner-join

我有一个表A和一个表B.我从表A中选择信息,其中我只需要表A中的信息,其中tabel B连接表A.我有关于连接和WHERE子句的列的索引。

这是选择代码:

SELECT *
FROM tableA

INNER JOIN tableB AS tableB
ON tableB.id = tableA.id
AND tableB.type = 'car'

当我使用说明时,我可以看到mysql正在对tableA中的所有行使用全表扫描。此外,它正确地使用索引来连接tableB。

所以Mysql似乎正在做的是扫描talbeA中的所有行,看看是否与tableB匹配。但是因为我对两个表的id都有索引,所以我不希望表格扫描。由于我的表有50.000行,这个查询需要几秒钟(这对我的应用来说真的太长了)。

这是解释:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  tableA      ALL     tableA.id       NULL    NULL    49898   
1   SIMPLE  tableB      eq_ref  tableB.type     tableB.type 4   1       Use WHere

我的问题:如何优化此查询和索引,以便Mysql直接从tableA中选择那些与tableB匹配的行,而不扫描talbeA中的所有行?

1 个答案:

答案 0 :(得分:0)

这是您可以获得JOIN查询的最大优化 请她提供更多详情 https://cryptkcoding.com/blog/2012/04/06/how-to-optimize-mysql-join-queries-through-indexing/