为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶刀刀 2018-12-06 20:26:21
SELECT top 10  CusName,SUM(monOutMoney) AS totalOutPrice,SUM(monIntoMoney) AS totalInPrice FROM vCardUseRecord WHERE intCompanyID = 8 AND intUseType = 3 GROUP BY CusNameORDER BY  totalOutPrice DESC vCardUseRecord是个视图,通过视图可以查询出总共13W条数据 现在从这13W条数据里面执行上面的SQL语句居然高达20秒以上 如果去掉order by语句,执行效率一下就上来了,达到毫秒级的 但是我肯定没有办法去掉order语句啊 因为我想返回支出金额最高的前10位, 如果不排序,我如何知道返回的是前10位? 如果去掉TOP,保留order 执行效率基本和加上top一致,没有任何优势 请大侠们帮忙想个办法优化一下啊,实在想不出来办法了啊
查看完整描述

8 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

你的查询计划贴上来看看

查看完整回答
反对 回复 2019-01-07
?
莫回无

TA贡献1865条经验 获得超7个赞

totalOutPrice字段是建立了索引?

查看完整回答
反对 回复 2019-01-07
?
波斯汪

TA贡献1811条经验 获得超4个赞

totalOutPrice是AS出来的字段名称,如何建立索引
查看完整回答
反对 回复 2019-01-07
?
慕标5832272

TA贡献1966条经验 获得超4个赞

@R:不好意思,当时没看清楚。
查看完整回答
反对 回复 2019-01-07
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-01-07
?
RISEBY

TA贡献1856条经验 获得超5个赞

totalOutPrice 是个 as出来的字段,请问应该怎样加索引呢?
查看完整回答
反对 回复 2019-01-07
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

@R: 先先试下:monOutMoney加索引行吗? 如果不行 你就要做个计划每天1点跑一次 将统计的结果放到另一张表,直接从另一张表取数据。
查看完整回答
反对 回复 2019-01-07
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

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

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

查看完整回答
反对 回复 2019-01-07
  • 8 回答
  • 0 关注
  • 803 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信