子查询会拉取整个表吗?

dab*_*dab 5 subquery

我正在尝试在表中运行子查询:

SELECT t1.*, t2.* FROM t1 
LEFT JOIN (SELECT * FROM table2 GROUP BY col1) AS t2 on t1.col1 = t2.col1
WHERE ...
Run Code Online (Sandbox Code Playgroud)

我的主要问题是,由于它自己调用的子查询会拉整个时间,它是否也在子查询中拉整个时间,即使父查询上的 WHERE 条件只拉几行实际数据库?

我想我可以将 where 查询放在子查询中,但它是一个非常复杂的 where 查询,涉及其他表。

Rob*_*ley 3

不应该。这取决于系统可以将查询简化为什么。

您可以通过考虑查询计划来轻松演示这一点,例如:

SELECT *
FROM YourTable
WHERE ID < 5;

SELECT *
FROM (SELECT * FROM YourTable) as t
WHERE ID < 5;
Run Code Online (Sandbox Code Playgroud)

两者应该是相同的。