我有一个表(我们称之为A)SQL Server 2016中,我想查询。我只需要选择那些具有确定状态的行,所以我需要排除一些行。还有另一个表(B),其中包含来自表A的记录ID和两列col1和col2。如果这些列是非空的,则相应的记录可以被认为是最终的。表A和表B之间存在一对一的关系。由于这些表非常大,我想使用最有效的查询。我应该选择哪一个?哪个是运行此SQL查询最快的方法?
SELECT *
FROM TableA
WHERE record_id IN
(SELECT record_id FROM TableB WHERE col1 IS NOT NULL AND col2 IS NOT NULL)
SELECT a.*
FROM TableA a
INNER JOIN TableB b ON a.record_id = b.record_id
WHERE b.col1 IS NOT NULL AND b.col2 IS NOT NULL
SELECT a.*
FROM TableA a
INNER JOIN TableB b
ON a.record_id = b.record_id
AND b.col1 IS NOT NULL
AND b.col2 IS NOT NULL
当然,如果有更快的方式,我没有想到,请分享。我也很想知道为什么一个查询比其他查询更快。
请阅读Eric Lippert的优秀[哪个更快?](https://ericlippert.com/2012/12/17/performance-rant/):“...如果你有两匹马,你想知道哪些二者之间的距离越大,你的马匹的速度越快,不要写简短的马匹描述,在互联网上发布,并要求随机的陌生人猜猜哪个更快......“ –
为什么你不试试它并找到出来吗? –
我做过了,但结果各不相同。差异是相当显着的(〜20%),但更快的查询并不总是一样的... –