由于我不知道计算效率,我会问这里,我希望有人可以告诉我什么是更好的并解释一下。
情景:
目前我有一个表格,可以插入每个工人的生产行
类似于:(Worker1)生成(product10)一些日期(一定数量)
这就是他当天工作的每个电台。
问题:
我需要生成工人为每个日期生成的金额总和的报告。我知道如何以任何方式生成报告,但问题是如何更有效率?
必须为每个人运行查询,总结每个日期的生产?或者有一张表,我会插入总金额,工人ID和日期?
再次,如果你可以进一步解释它会很好,如果不是至少一个有根据的答案将帮助我很多这个问题。
示例:
这就是我现在在生产表中所拥有的:
ID EmpID ProductID Amount Dateofproduction ---------------------------------------------------------- 1 1 1 100 14/01/2013 2 1 2 20 14/01/2012
这就是我最终想要的:
EmpID Amount DateofProduction ----------------------------------- 1 120 14/01/2013
我应该为此启动另一张桌子吗?或者我应该在生产表中总结一下我的需求并采取我需要的东西? 请记住,生产表每天都会越来越大(当然)。
答案 0 :(得分:1)
除非我遗漏了什么,否则听起来你只是想要这个:
select empid,
sum(amount) TotalAmount,
Dateofproduction
from yourtable
group by empid, Dateofproduction
结果:
| EMPID | TOTALAMOUNT | DATEOFPRODUCTION |
------------------------------------------
| 1 | 120 | 2013-01-14 |
注意:我猜你提供的第二行数据应该是2013
而不是2012
。
答案 1 :(得分:1)
i)直接:
select EmpId, sum(Amount) as Amount, DateOfProduction
from ProductionTable
group by EmpId, DateOfProduction.
ii)现在,表格的大小将继续增长。而且你只需要按日报告。
这张桌子是否被其他人使用?部分数据可以归档吗?如果可以存档某些数据,我建议在每天和报告之后,将此表中的所有数据备份到辅助存档表。因此,每天您只需查询today's
个值的记录。
其次,您可以考虑将index
添加到DateOfProduction
。然后,您就可以在日期范围内限制查询。例如,select EmpId, sum(Amount) as Amount, DateOfProduction from ProductionTable group by EmpId, DateOfProduction where DateOfProduction = Date(now()).
(或类似的东西)
因为它只是一个表而且没有复杂的查询,所以MySql可以轻松地处理数百万条记录。尝试对查询进行EXPLAIN以检查被触摸的记录数和正在使用的索引。