我一直在研究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的一部分。
尽管它返回相同的结果,但我想知道这种方法的性能提升以及我尚未意识到的利弊。这是一个很好的方法吗?
答案 0 :(得分:1)
两者应该完全相同。 SQL Server的编译器将查看查询并意识到它们正在描述相同的结果集。然后,它将根据数据优化查询计划。
on
子句或where
子句中的条件是否与inner join
无关。 (这对outer join
很重要。)