性能会影响在内部联接中指定多个列

时间:2014-04-14 10:52:09

标签: sql sql-server

我想根据匹配两列的值从两个表中选择一些记录。 我有两个相同的查询,其中包含两个列的连接:

    SELECT 
         *
    FROM
        USER_MASTER UM
    INNER JOIN
        USER_LOCATION UL
    ON 
        UM.CUSTOMER_ID=UL.CUSTOMER_ID AND UM.CREATED_BY=UL.USER_ID

并且可以通过以下具有单列连接的查询来实现相同的结果:

    SELECT 
            *
    FROM
        USER_MASTER UM
    INNER JOIN
        USER_LOCATION UL
    ON 
        UM.CREATED_BY=UL.USER_ID
    WHERE
        UM.CUSTOMER_ID=UL.CUSTOMER_ID 

上述查询的效果是否存在差异?

1 个答案:

答案 0 :(得分:0)

关于表现的一切答案是:它取决于。

一般来说,引擎足够智能以优化两个查询,如果两者都产生相同的执行计划,我并不感到惊讶。

实际上,您必须运行两次查询并研究执行计划,以确定两者是否使用相同数量的CPU,IO和内存运行大约相同的时间 AND 。 (记住,性能不仅仅是关于快速运行,而是关于所有资源的智能使用)。

对于"语义"愿景,你的数据使用两个键来确定"。在这种情况下,您可以将两个表达式都放在JOIN谓词上。只允许在WHERE子句中进行过滤。 显式连接优于隐式连接的优点是创建此逻辑(和可视)分离