我正在为我工作的公司创建一个简单的业务分析应用程序,并且在过去的6年里有一个100mb csv的销售交易文件,我已经将其解析为多个数据库。
我想在我的应用程序中显示的一个数字是每个客户每天的营业额和利润,所以我有一个如下所示的while循环:
while(start_date < current_date)
{
SELECT SUM(profit), SUM(turnover) FROM sales WHERE date = @date
}
所以,我每天都会在几十万行的桌面上运行该查询,每天都有6年的顾客。
我总是相信任何可以在数据库中执行的工作都应该 - 这就是为什么我使用SUM查询来累计列。
我可以做出哪些其他优化?目前正在采取......好吧,我无法告诉你,因为它已经在8GB四核服务器上运行了最后一小时,看起来大约在2-3%左右。
我正在使用SQL Server Compact Edition,它是C#/ .NET中的winforms应用程序,但db显然是这里的瓶颈。
答案 0 :(得分:1)
我只运行一次(修改过的)查询并循环遍历结果集。它应该更快。
SELECT
customer, date, SUM(profit), SUM(turnover)
FROM
sales
WHERE
date < current_date
GROUP BY
customer, date
ORDER BY
customer, date
for each (row in resultset) {
//process customer/date
}
答案 1 :(得分:0)
尝试引入汇总表,您将获得每日统计信息。每当您向sales表添加更多数据时,都会更新汇总表[带触发器或应用程序逻辑]。