首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行的优势--选择不同的选择

运行的优势--选择不同的选择
EN

Stack Overflow用户
提问于 2016-07-07 14:39:46
回答 2查看 144关注 0票数 1

因此,我对SQL相当陌生,在我目前的实习期间,我的任务是修改/记录程序。

为了直接讨论这个问题,我在一个表上运行了以下查询:

代码语言:javascript
复制
SELECT COUNT(*) as NumofAccounts 
    FROM Accounts 
        WHERE Deleted = 0 
        AND Account_ID In ( SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0 );

得到NumofAccounts = 18的结果。

然而,最初的查询是:

代码语言:javascript
复制
SELECT COUNT(*) as NumofAccounts 
        FROM Accounts 
            WHERE Deleted = 0 
            AND Account_ID In ( SELECT Account_ID FROM Tasks WHERE Deleted = 0 );

但是,如果将查询的这一部分隔离开来,则这两个查询都会产生NumofAccounts = 18:

代码语言:javascript
复制
SELECT Account_ID FROM Tasks WHERE Deleted = 0; 

有736行结果,其中许多是重复的Account_IDs。

但是,如果一个人添加了不同的:

代码语言:javascript
复制
SELECT DISTINCT Account_ID FROM Tasks WHERE Deleted = 0; 

只有18行结果,这与NumofAccounts一致。

有没有任何方法来分析这两个查询之间的运行时或效率差异?

抱歉,我的帖子太长了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-07 14:47:05

您可以打开查询执行计划,查看查询是如何执行的:

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

因此,使用这些工具,您可以比较不同的查询,并选择更好的查询。

票数 3
EN

Stack Overflow用户

发布于 2016-07-07 14:43:52

你可以使用存在,这样可以做得更好。

代码语言:javascript
复制
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.使用更多内存

如果您的效率与执行时间有关,那么上面的查询可以工作得更好。

根据几个因素,例如表上可用的索引、执行计划的选择,两个查询的工作方式可能不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38248385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档