给定 MySQL 中的 SQL 查询:
SELECT * FROM tableA WHERE tableA.id IN (SELECT id FROM tableB);
MySQL是否执行子查询SELECT id FROM tableB
每行多次tableA
?
有没有一种方法可以在不使用变量或存储过程的情况下使 sql 运行得更快?
为什么这通常比使用慢LEFT JOIN
?
你的假设是错误的;子查询只会执行一次。它比 join 慢的原因是IN
无法利用索引;每次它都必须扫描它的参数一次WHERE
子句被评估,即表 A 中的每行评估一次。您可以优化查询,无需使用变量或存储过程,只需替换IN
通过连接,因此:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
除非您不介意从两个表中获取每个字段,否则您确实需要枚举所需的字段SELECT
条款;tableA.*
例如,将引发语法错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)