gpt4 book ai didi

sql - 连接多个表 : where to filter efficiently

转载 作者:行者123 更新时间:2023-11-29 14:19:01 25 4
gpt4 key购买 nike

我有许多表,大约有四个,我希望连接在一起。为了使我的代码更清晰和可读(对我而言),我希望一次加入所有代码,然后在最后过滤:

SELECT f1, f2, ..., fn
FROM t1 INNER JOIN t2 ON t1.field = t2.field
INNER JOIN t3 ON t2.field = t3.field
INNER JOIN t4 ON t3.field = t4.field
WHERE // filters here

但我怀疑将每个表放在子查询中并在每个范围内进行过滤会使性能更好。

SELECT f1, f2, ..., fn
FROM (SELECT t1_f1, t1_f2, ..., t1_fi FROM t1 WHERE // filter here) AS a
INNER JOIN
(SELECT t2_f1, t2_f2, ..., t2_fj FROM t2 WHERE // filter here) AS b
ON // and so on

如果我的预感是正确的,请告知哪一个会导致更好的性能。我愿意牺牲性能来提高可读性。

如果确实在每个子查询中进行过滤会更有效,那么数据库平台的体系结构是否会有所不同,或者这是否适用于所有 RDBMS SQL 风格?

我同时使用 SQL Server 和 Postgres。

最佳答案

查询优化器将始终尝试从您的 SQL 中找到最佳计划。

您应该更多地专注于编写可读、可维护的代码,然后通过分析执行计划找到查询中效率低下的部分(更有可能)是数据库和索引设计中效率低下的部分。

在没有任何有意义的分析的情况下将您的过滤从 where 子句转移到 join 子句很可能是浪费精力。

关于sql - 连接多个表 : where to filter efficiently,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com