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贡献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
- 8 回答
- 0 关注
- 803 浏览
添加回答
举报
0/150
提交
取消