gpt4 book ai didi

sql-server - "Sub SELECT before INNER JOIN"还是 "WHERE after INNER JOIN"?

转载 作者:行者123 更新时间:2023-12-03 03:29:34 26 4
gpt4 key购买 nike

有表 A 和表 B。我想将这些表连接到两列,但仅限于表 A 的选定行。

查询场景:

SELECT B.*
FROM B
INNER JOIN (SELECT * FROM A WHERE A.COLUMN1 BETWEEN somevalue1 AND somevalue2) C
ON B.COLUMN2 = C.COLUMN2
AND B.COLUMN3 = C.COLUMN3

或者

SELECT B.*
FROM B
INNER JOIN A
ON B.COLUMN2 = A.COLUMN2
AND B.COLUMN3 = A.COLUMN3
WHERE A.COLUMN1 BETWEEN somevalue1 AND somevalue2

表 A 和表 B 都有数百万条记录。使用 WHERE 条件,表 A 将仅返回 1000 个结果,因此要执行的实际联接是从 B 中查找 A 的仅 1000 行的匹配详细信息。

查询:

哪个应该更快? (我无权查看查询执行计划)

谢谢!

最佳答案

如果不进行实际测量,就很难预测性能。

我的直觉认为后一个选项应该更快,因为优化器可能希望在连接之前完全具体化内部查询,这除了本身很慢之外可能会破坏任何可能有帮助的索引一起加入。另一方面,后一个选项的优化器应该仍然足够聪明,可以在连接之前预先过滤表 A,而不会有破坏索引的风险,并且能够仅实现与连接匹配的结果。不过,请注意其中所有的狡猾的话;在这种情况下,我的直觉可能会大错特错。从中汲取的真正教训是在尽可能接近实际的条件下使用真实数据测量您的查询。

更重要的是,我更喜欢后者,因为(我认为)它更具可读性和可维护性。

关于sql-server - "Sub SELECT before INNER JOIN"还是 "WHERE after INNER JOIN"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585524/

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