【发布时间】:2010-07-15 15:23:29
【问题描述】:
我对 SQL 还很陌生,所以我想知道我是否以最优化的方式执行此操作。
SELECT DISTINCT ACCOUNTID, ACCOUNT_NAME
(SELECT COUNT(*)
FROM TICKET
WHERE (ACCOUNTID = OPPORTUNITY.ACCOUNTID)) AS [Number Of Tickets],
(SELECT COUNT(*)
FROM TICKET
WHERE (ACCOUNTID = OPPORTUNITY.ACCOUNTID) AND (STATUSCODE = 1 OR
STATUSCODE = 2 OR
STATUSCODE = 3)) AS [Active Tickets]
from OPPORTUNITY
where AccountID > @LowerBound and AccountID < @UpperBound
我想要做的是获取所有帐户的列表,并让它显示该帐户有多少票以及有多少是活动的(状态代码为 1、2 或 3)。选择中的选择是执行此操作的正确方法,还是可以使用 group by 之类的方法来完成。
我最担心的是速度,仅提取大约 20 条记录需要 3-5 秒,并且查询可能有 1000 条结果。
我不是 DBA,因此对表架构的任何更改都不是强制性的,但需要向高层管理人员提出一些请求。
这是针对 SQL Server 2000 运行的。
编辑—— 作为询问它的所有答案,我检查了它。 accountid 升序时的 Opportunity 和票证索引。
【问题讨论】:
-
是的,尤其是在处理制表符时,格式有时会有些棘手和“随机” :-) 很高兴知道您了解正确的格式 - 对可读性有很大影响!
标签: sql-server-2000 count query-optimization