我应该在每个子查询中执行WHERE
,还是仅在主查询中执行?我的问题是关于表现。例如:
所有子查询中的位置:
SELECT ...
FROM ...
WHERE id_user = :id_user
UNION ALL
SELECT ...
FROM ...
WHERE id_user = :id_user
在这种情况下,每个子查询都会有相同的 WHERE
子句,按id_user
进行过滤。
仅适用于主查询:
SELECT
SUBQUERY.*
FROM (
SELECT ..., id_user
FROM ...
UNION ALL
SELECT ..., id_user
FROM ...
) AS SUBQUERY
WHERE SUBQUERY.id_user = :id_user
在这种情况下,每个子查询都将返回id_user
,因此主查询将获取它并将进行过滤。
在我看来,第一个会更快,因为它会首先过滤,结合并返回所有。在第二种情况下,它会找到all,union和filter。第二种方法的优点是我会一次写WHERE
- 想象我有10个类似的子查询。
但问题是:MySQL能否优化它?
答案 0 :(得分:2)
MySQL实现了子查询。这意味着在进行后续处理之前,子查询已完全处理。
因此,在MySQL中,您应该将GATEWAYIP=$(ip route show | grep default | awk '{print $3}')
子句放在子查询中,以减少数据量并加快查询速度。您的第一个版本应该比第二个版本具有更好的性能。
此外,您可以删除第一个版本的外部查询。只是做:
where
在大多数其他数据库中都不是这样。