C#与SQL数据库模式问题

C#与SQL数据库模式问题,sql,Sql,是否可以使用多达10k条记录动态生成字段内容的总计,而不是将总计存储在表中? 我有一些理由更喜欢按需生成一个总的,但有多坏的性能价格对一个普通的家用电脑?(计算总数时会涉及一些联接(ORM托管) 如果我遗漏了任何对决定答案很重要的信息,请告诉我。 编辑:这是用户PC上的一个独立程序。使用Sql查询,您可以使用max函数快速、廉价地获取记录总数 最好是生成总数,然后将其作为记录保存,就像保存一个人的出生日期并确定他们的年龄,然后保存他们的年龄一样。您可以使用SQL“可以”计算总数(我假设您不需要

是否可以使用多达10k条记录动态生成字段内容的总计,而不是将总计存储在表中? 我有一些理由更喜欢按需生成一个总的,但有多坏的性能价格对一个普通的家用电脑?(计算总数时会涉及一些联接(ORM托管)

如果我遗漏了任何对决定答案很重要的信息,请告诉我。
编辑:这是用户PC上的一个独立程序。

使用Sql查询,您可以使用max函数快速、廉价地获取记录总数

最好是生成总数,然后将其作为记录保存,就像保存一个人的出生日期并确定他们的年龄,然后保存他们的年龄一样。

您可以使用SQL“可以”计算总数(我假设您不需要记录总数……总价格或其他任何数据)。当SQL被告知这样做时,它非常擅长数学:)不存储总计

但是,由于它都是在客户机上运行的,我认为我更倾向于使用C#来进行合计。然后,用于计算总数的业务规则不在DB/SQL中。我的意思是,如果您有一个复杂的合计计算,需要在低于50英镑的订单上增加5%,而“业务”将其更改为在低于50英镑的订单上增加10%,那么它是在您的“业务逻辑”代码中完成的,而不是在您的存储介质中完成的(在本例中为SQL)

善良


Dan

更新总量所依赖的数据的偏移量和用户数量


也许您只需要每天进行一次(或一次)大型查询,并将其保存在db中的某个位置,然后在数据(您的总组成)发生更改时进行更新。通常,这是完全可以接受的,甚至建议重新计算值。如果您开始存储计算值,您将面临一些开销,通常使用触发器来确保它们始终是最新的


这就是说,如果您的特定计算查询花费了大量时间,您可能需要走这条路线,但只有在您实际遇到性能问题时才这样做,而不是在前期。如果您有适当的索引,按需计算不会太糟糕。我提到索引的原因是,您没有指定总计是在列中的所有值上,还是在子集上-如果它是子集,那么组成筛选器的字段可能需要索引,以避免表扫描。

我认为这不应该花费太长时间,可能不到一秒钟,从8000-10000条记录中生成一个总和。即使在单台PC上,此查询的查询计划也应以单表扫描为主,这将生成大部分顺序I/O


适当的索引应该使任何连接都相当有效,除非模式存在严重缺陷,并且除非表中有(比如)大的blob字段,否则行的总数据量不应该很大。如果你仍然有一个通过O/R映射器的性能问题,考虑将功能重铸为一个可以控制SQL的报告。

我认为他的“总数”指的是一个值的总和,而不是记录的数量。它可以一天更新数次,一天被请求多次。性能价格是多少?将有标准来决定使用哪些行来计算总价格。这就是你的意思吗?是的,这正是我的意思。您可能需要在数据库上运行查询探查器,以查看查询是否正在扫描表。谢谢。愚蠢的问题:如果我使用Linq,你的建议适用吗?是的。L2S在幕后转换为SQL,因此您需要处理完全相同的事情。明白了。所以我应该把它全部设置好并运行,然后运行一个查询分析器,看看它是否在扫描整个表?这是用户PC上的一个独立程序。(我编辑了我的问题来展示这个。)这会改变你的想法吗?谢谢。你能解释一下你所说的“那么计算总数的业务规则不在DB/SQL中”是什么意思吗?补充了一点解释:)谢谢ConcernedOfTunbridgeW。(呼)