因此,我对SQL相当陌生,在我目前的实习期间,我的任务是修改/记录程序。
为了直接讨论这个问题,我在一个表上运行了以下查询:
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。
但是,如果一个人添加了不同的:
SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0; 只有18行结果,这与NumofAccounts一致。
有没有任何方法来分析这两个查询之间的运行时或效率差异?
抱歉,我的帖子太长了!
发布于 2016-07-07 14:47:05
您可以打开查询执行计划,查看查询是如何执行的:

此外,您还可以打开客户端统计数据并获得总执行时间:

因此,使用这些工具,您可以比较不同的查询,并选择更好的查询。
发布于 2016-07-07 14:43:52
你可以使用存在,这样可以做得更好。
SELECT COUNT(*) as NumofAccounts
FROM Accounts a
WHERE Deleted = 0
AND exists ( SELECT Account_ID FROM Tasks t WHERE t.Deleted = 0 and t.account_id=a.account_id) ;当你说到效率的时候,你需要缩小到以下几个方面
1.执行时间需要改进
2.查询消耗更多的cpu。
3.使用更多内存
如果您的效率与执行时间有关,那么上面的查询可以工作得更好。
根据几个因素,例如表上可用的索引、执行计划的选择,两个查询的工作方式可能不同。
https://stackoverflow.com/questions/38248385
复制相似问题