SQL内部vs左连接问题

use*_*150 7 sql t-sql sql-server performance sql-server-2005

我有一个非常糟糕的SQL查询.我将其追踪到桌面上执行的INNER JOIN.将此更改为LEFT join可显着提高性能(从6分钟到20秒) - 现在我知道2不等同,但......这就是我要问的

SELECT * 
  FROM SomeTable ST
  JOIN BigTable BT ON BT.SomeID = ST.SomeID 
                  AND BT.Something = ST.Something 
                  AND BT.AnotherValue = '123'
Run Code Online (Sandbox Code Playgroud)

由于联接有额外的标准(和某些东西) - 正在将其更改为左连接产生相同的结果 - 但更快?

使用LEFT/INNER返回的结果是相同的,左边明显更快......

shi*_*kou 2

看起来反过来进行内部连接会带来更好的性能......

SELECT
    *
FROM
    BigTable AS BT
INNER JOIN
    SomeTable AS ST
ON
    BT.AnotherValue = '123'
AND
    BT.SomeID = ST.SomeID 
AND
    BT.Something = ST.Something
Run Code Online (Sandbox Code Playgroud)

或使用子查询

SELECT
    *
FROM
    (SELECT * FROM BigTable WHERE AnotherValue = '123') AS BT
INNER JOIN
    SomeTable AS ST
AND
    BT.SomeID = ST.SomeID 
AND
    BT.Something = ST.Something
Run Code Online (Sandbox Code Playgroud)

另外,请确保BigTable.AnotherValue已正确索引。