首页 新闻 搜索 专区 学院

MsSql order by group by sum语句的优化问题

0
悬赏园豆:30 [已解决问题] 解决于 2010-07-12 21:02

SELECT top 10  CusName,
SUM(monOutMoney) AS totalOutPrice,
SUM(monIntoMoney) AS totalInPrice
FROM vCardUseRecord
WHERE
intCompanyID = 8
AND intUseType = 3
GROUP BY CusName
ORDER BY  totalOutPrice DESC

vCardUseRecord是个视图,通过视图可以查询出总共13W条数据

现在从这13W条数据里面执行上面的SQL语句居然高达20秒以上

如果去掉order by语句,执行效率一下就上来了,达到毫秒级的

但是我肯定没有办法去掉order语句啊

因为我想返回支出金额最高的前10位,

如果不排序,我如何知道返回的是前10位?

如果去掉TOP,保留order 执行效率基本和加上top一致,没有任何优势

请大侠们帮忙想个办法优化一下啊,实在想不出来办法了啊

R的主页 R | 初学一级 | 园豆:40
提问于:2010-07-09 09:26
< >
分享
最佳答案
-3

你的查询计划贴上来看看

收获园豆:15
邀月 | 高人七级 |园豆:25375 | 2010-07-09 10:08
其他回答(3)
0

totalOutPrice字段是建立了索引?

dudu | 园豆:37126 (高人七级) | 2010-07-09 09:57
totalOutPrice是AS出来的字段名称,如何建立索引
支持(0) 反对(0) R | 园豆:40 (初学一级) | 2010-07-09 10:07
@R:不好意思,当时没看清楚。
支持(0) 反对(0) dudu | 园豆:37126 (高人七级) | 2010-07-09 10:59
0

totalOutPrice 加个 索引 使用DESC排序 就OK了

熊哥 | 园豆:682 (小虾三级) | 2010-07-09 10:58
totalOutPrice 是个 as出来的字段,请问应该怎样加索引呢?
支持(0) 反对(0) R | 园豆:40 (初学一级) | 2010-07-09 13:10
@R: 先先试下:monOutMoney加索引行吗? 如果不行 你就要做个计划每天1点跑一次 将统计的结果放到另一张表,直接从另一张表取数据。
支持(0) 反对(0) 熊哥 | 园豆:682 (小虾三级) | 2010-07-09 14:13
0

你可以先查询出符合条件的记录,再排序。比如

SELECT top 10  CusName,
 totalOutPrice,
 totalInPrice
FROM

SELECT CusName,
SUM(monOutMoney) AS totalOutPrice,
SUM(monIntoMoney) AS totalInPrice
FROM vCardUseRecord
WHERE
intCompanyID = 8
AND intUseType = 3


GROUP BY CusName
ORDER BY  totalOutPrice DESC

收获园豆:15
个人抽屉 | 园豆:143 (初学一级) | 2010-07-09 16:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册