我正在使用Entity Framework和Azure Sql。
我有用户,他们在余额表上有记录。有些用户可能有100万条记录。在每次http请求之前我需要用户的总余额。
我有两种方法可以获得用户的总余额:
第一: 在事务中插入余额并更新totalbalance字段(单独)。
for (i = 0 to N)
if matrix[i][temp]==1:
Sum[i]=Sum[i]-1
if Sum[i]==0:
add i as child of temp
add i to queue
如果我需要总余额,我只需从transaction(
InsertBalance(amount)
Update CustomerSummary Set Totalbalance=Totalbalance+Amount
)
表中选择此项。
第二:直接插入余额而不使用任何交易。 如果我需要总余额,我必须通过查询获得总和。
第一种方法对于总余额是否可靠?
我可以像第一种方法一样快速地获得第二种方法的总和吗?
答案 0 :(得分:4)
第二种方法保证准确 - 如果你想要特定列的总和,没有什么比计算总和的查询更准确。
维护摘要表的原因是性能。通常,这样的表以两种方式之一维护:
insert
的示例是“应用程序端”解决方案。危险在于有人可能会说平衡不正确,然后在数据库中直接更改值。总数不会改变。
为了使其正常工作,您需要对数据库的访问权进行正确的控制,以确保每当amount
更改时,其所有依赖项都会发生更改。注意:如果您在需要时计算余额,这不是问题。