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

2024-04-27

我有一个表 A 和一个表 B。我正在从表 A 中选择信息,其中我只需要表 A 中的信息,其中表 B 联接表 A。我在联合列和 WHERE 子句上有索引。

这是选择代码:

SELECT *
FROM tableA

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

当我使用解释时,我可以看到 mysql 对表 A 中的所有行使用全表扫描。此外,它正确地使用索引来连接 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 中的所有行?


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Mysql在连接另一个表B时对表A使用全表扫描? 的相关文章

随机推荐