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一致,没有任何优势
请大侠们帮忙想个办法优化一下啊,实在想不出来办法了啊
你的查询计划贴上来看看
totalOutPrice字段是建立了索引?
totalOutPrice 加个 索引 使用DESC排序 就OK了
你可以先查询出符合条件的记录,再排序。比如
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