使用SQL Server 2014:
以下语句是否有性能差异?
DELETE FROM MyTable where PKID IN (SELECT PKID FROM @TmpTableVar)
与
DELETE FROM MyTable INNER JOIN @TmpTableVar t ON MyTable.PKID = t.PKID
使用SQL Server 2014:
以下语句是否有性能差异?
DELETE FROM MyTable where PKID IN (SELECT PKID FROM @TmpTableVar)
与
DELETE FROM MyTable INNER JOIN @TmpTableVar t ON MyTable.PKID = t.PKID
SELECT PKID INTO #Temp
FROM @TmpTableVar
-- Create some index on the temp table here .....
DELETE FROM MyTable
WHERE EXISTS (SELECT 1
FROM #Temp t
WHERE MyTable.PKID = t.PKID)
注意
如果您在表变量上使用IN运算符,则会正常工作,因为它是主键列。但是,如果您在可空列上使用IN运算符,则结果可能会让您惊讶。只要在正在检查的列中发现NULL值,IN运算符就会出问题。
我个人更喜欢使用Exists运算符进行此类查询,但内连接也应该可以正常工作,但如果可以避免,请勿使用IN运算符。
EXPLAIN
命令用于获取执行计划信息。 - Mike Robinson