因此,我对SQL相当陌生,并且在我目前的实习中负责修改/记录程序。将SELECT DISTINCT运行到SELECT的优点
要切入,我运行上的表以下查询:
SELECT COUNT(*) as NumofAccounts
FROM Accounts
WHERE Deleted = 0
AND Account_ID In (SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0);
其产生NumofAccounts = 18
然而原始查询是的结果:
SELECT COUNT(*) as NumofAccounts
FROM Accounts
WHERE Deleted = 0
AND Account_ID In (SELECT Account_ID FROM Tasks WHERE Deleted = 0);
这两个查询都会产生NumofAccounts = 18,但是,如果分隔查询的这一部分:
SELECT Account_ID FROM Tasks WHERE Deleted = 0;
有736行结果,其中很多都是重复的Account_IDs。
但如果加上DISTINCT:
SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0;
只有18行的结果,这与NumofAccounts嘲弄。
有什么办法可以分析这两个查询之间的运行时间或效率差异吗?
对不起,冗长的帖子!
由于'Account_ID'中的内存索引自动创建,'DISTINCT'会执行得更慢。不需要将'DISTINCT'与'IN'语句结合使用。 –
仅供参考,请参阅查询的估计和实际执行计划:[(MSDN:execution plans)](https://msdn.microsoft.com/en-us/library/ms189562(v = sql.105) .aspx)这将允许你执行你需要的分析。 –
@ChrisPickford它们在逻辑上是相同的查询,查询引擎可能可以解决这个问题并为它们生成相同的计划。 – Caleth