在多个列上连接时,匹配列的顺序重要吗?

时间:2019-10-05 10:41:29

标签: sql sql-server

在物质上匹配的列的顺序吗?

  1. 首先加入代码,然后加入ID:
SELECT a.name, a.code, a.OBJECT_NAME, a.id, s.id_WANTED
    FROM table_1 a

RIGHT JOIN s ON
a.code = s.code
AND a.id = s.id_WANTED
  1. 首先加入id,然后加入代码
SELECT a.name, a.code, a.OBJECT_NAME, a.id, s.id_WANTED
    FROM table_1 a

RIGHT JOIN s ON
a.id = s.id_WANTED
AND a.code = s.code

2 个答案:

答案 0 :(得分:0)

不能保证并且不能依赖T-SQL WHERE子句中的短路,因为优化器可以选择对其进行评估(see this Stack DBA question for a canonical answer)。意识到我们可以实际编写查询,以便ON子句逻辑出现在WHERE子句中(注意:我建议以这种方式编写查询):< / p>

SELECT a.name, a.code, a.OBJECT_NAME, a.id, s.id_WANTED
FROM table_1 a, table_2 s
WHERE a.id *= s.id_WANTED AND
      a.code *= s.code;

由于我们知道上面没有保证的操作顺序,因此我们可以假定联接的行为是这样的。

答案 1 :(得分:0)

没关系,因为查询引擎将根据索引和其他统计信息重新组织JOIN顺序。 将 OPTION(强制订单)添加到查询中,您会发现这很重要。

作为一般的经验法则,JOIN顺序应位于最少记录的表顶部,并且多数记录的表最后。因此,性能会很高更好。