首页 > 解决方案 > SQL 内联多表一次查询

问题描述

我有一个像下面这样的查询,

SELECT
c.testID,
FROM a
INNER JOIN b ON a.id=b.ID
INNER JOIN c ON b.r_ID=c.id
WHERE c.test IS NOT NULL;

这个查询可以进一步优化吗?我希望三个表之间的内部连接只有在满足 where 子句时才会发生。

标签: mysql

解决方案


Where 子句用作对所有 JOIN 之后出现的数据的过滤器,而如果您对 JOIN 子句本身使用相同的限制,那么它将在避免连接后过滤器的意义上进行优化。也就是说,改为加入过滤的数据。

SELECT c.testID,
FROM a
INNER JOIN b ON a.id = b.ID
INNER JOIN c ON b.r_ID = c.id AND c.test IS NOT NULL;

test此外,您必须为表中的列创建索引c以加快查询速度。

此外,学习 EXPLAIN 命令以获取最佳结果。


推荐阅读