使用INNER JOIN作为过滤器的性能和优点/缺点

时间:2016-10-24 03:13:53

标签: sql sql-server

我一直在研究MS SQL Server,并且一直遵循标准SQL查询来执行INNER JOIN并根据条件过滤结果集。

最近,我正在使用一个大表,它在某种程度上导致整个查询花费很长时间来进行查询。

以下只是对情况的模拟查询。

Select * FROM Customer a
INNER JOIN ProcessTable PT WITH(NOLOCK) on PT.custID = a.ID
INNER JOIN AuditTrailTable AT WITH(NOLOCK) on AT.custID = a.ID
WHERE AT.DATESTAMP > 'Some date time'

我的同事提出了一个新的查询,如下所示

Select * FROM Customer a
INNER JOIN ProcessTable PT WITH(NOLOCK) on PT.custID = a.ID
INNER JOIN AuditTrailTable AT WITH(NOLOCK) on AT.DATESTAMP > 'Some date time' AND AT.custID = a.ID

我观察到他已将过滤子句作为INNER JOIN的一部分。

尽管它返回相同的结果,但我想知道这种方法的性能提升以及我尚未意识到的利弊。这是一个很好的方法吗?

1 个答案:

答案 0 :(得分:1)

两者应该完全相同。 SQL Server的编译器将查看查询并意识到它们正在描述相同的结果集。然后,它将根据数据优化查询计划。

on子句或where子句中的条件是否与inner join无关。 (这对outer join很重要。)