【发布时间】:2019-10-09 07:33:20
【问题描述】:
我想知道在我加入两个(或十个......)表之前或之后根据性能选择相关列是否会有所不同。
假设每个表 (A / B) 最初有 20-30 列。
示例 1:
SELECT A.col1, A.col2, B.col3, B.col4
FROM A
LEFT JOIN B ON B.col2 = A.col2
示例2:
SELECT A.col1, A.col2, B.col3, B.col4
FROM (SELECT col1, col2 FROM A) A
LEFT JOIN (SELECT col2, col3, col4 FROM B) B ON (B.col2 = A.col2)
性能有区别吗?
【问题讨论】:
-
执行计划告诉你什么?
-
任何 dbms 都应该优化它。执行版本 1 以保持代码简单,跳过那些子查询。
-
我最终使用了带有 SELECT DISTINCT 的第二个示例 - 不是因为性能本身,而是因为使用 78GB 表,我遇到了磁盘错误。我猜这取决于更快的优化器的能力(?),但对于我的具体情况,事实证明还有存储因素。
-
好吧,如果您将
DISTINCT应用于其中一个派生表,那将是一个完全不同的查询。 -
这意味着您的查询返回重复项,这可能意味着您的连接条件不完整(它会产生部分笛卡尔积)。
标签: sql amazon-redshift