SQL server Query Count() 优化
Posted
技术标签:
【中文标题】SQL server Query Count() 优化【英文标题】:SQL server Query Count() Optimization 【发布时间】:2013-10-12 08:32:17 【问题描述】:我使用的是 SQL Server 2005。我在查询中使用了 3 次 Count()
select
p.side,
p.uid as uid,
count (p.side) as cside,
(count (p.side)/ 3) as pairs,
((count (p.side)/ 3) * 15 ) as commisonPrice
from
tempComm as p
group by
p.side , p.uid
order by
p.uid;
它给了我正确的输出,但问题是如何通过在我的查询中使用这种重复性来防止?
【问题讨论】:
你追求效率还是优雅? 为了效率,数据会快速增长,所以我主要关注性能,高效地计算和检索数据 您应该在问题中说明这一点。你得到的答案并不比你的查询更有效率。 这似乎效率不高。 . .你能建议我写这个查询的一种有效方法吗 【参考方案1】:select
side,
uid,
cside,
cside/3 as pairs,
cside/3*15 as commisonPrice
from
(
select
p.side ,
p.uid as uid ,
count (p.side) as cside
from tempComm as p
group by p.side , p.uid
) t
order by uid;
【讨论】:
也需要一点解释 所以你声称这样更有效率? 问题不在于效率,而在于口是心非【参考方案2】:几种方法。
1. Common Table Expression - 在 SQL Server 2005 中引入
;用 cte 作为 (
select p.side, p.uid as uid, count (p.side) as cside from tempComm as p group by p.side , p.uid ) select * , cside / 3 as pairs , (cside / 3) * 15 as commisonPrice from cte order by p.uid;
2。派生表
select
side,
uid,
cside,
cside/3 as pairs,
(cside/3)*15 as commisonPrice
from
(
select
p.side ,
p.uid as uid ,
count (p.side) as cside
from tempComm as p
group by p.side , p.uid
) t
order by uid;
其他方法是使用临时表、视图,您必须首先在其中插入数据并对列执行进一步操作,但我认为您的问题不需要它们。
注意:
CTE 和派生表都只能使用一次,如果您需要 对您的数据执行多项操作,然后使用临时 表格。
性能方面,CTE 和派生表具有相似的性能, 它只是偏好问题,您希望哪一个更具可读性 并且可以理解。
【讨论】:
以上是关于SQL server Query Count() 优化的主要内容,如果未能解决你的问题,请参考以下文章
MS ACCESS SQL QUERY COUNT DISTINCT