0

我正在为我工​​作的公司创建一个简单的业务分析应用程序,并拥有一个 100mb 的 csv 文件,其中包含过去 6 年的销售交易,我已将其解析为多个数据库。

我想在我的应用程序中显示的数据之一是每位客户每天的营业额和利润,所以我有一个如下所示的 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 显然是这里的瓶颈。

4

2 回答 2

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
}
于 2012-08-31T15:03:41.660 回答
0

尝试引入汇总表,您将在其中获得每日统计信息。每当您向销售表添加更多数据时,更新该汇总表 [使用触发器或应用程序逻辑]。

于 2012-08-31T14:52:19.887 回答