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

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一致,没有任何优势

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

蝴蝶刀刀
浏览 804回答 8
8回答

月关宝盒

你的查询计划贴上来看看

莫回无

totalOutPrice字段是建立了索引?

波斯汪

totalOutPrice是AS出来的字段名称,如何建立索引

慕标5832272

@R:不好意思,当时没看清楚。

慕姐8265434

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

RISEBY

totalOutPrice 是个 as出来的字段,请问应该怎样加索引呢?

缥缈止盈

@R: 先先试下:monOutMoney加索引行吗? 如果不行 你就要做个计划每天1点跑一次 将统计的结果放到另一张表,直接从另一张表取数据。

一只甜甜圈

你可以先查询出符合条件的记录,再排序。比如 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 CusNameORDER BY  totalOutPrice DESC
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server