可能重复:
存储与计算聚合值
在一份旧工作中,我们有这个数据库,它没有被规范化,有些表不再使用,它是一个接一个的补丁。总之,这是一团糟。
有一次,当我试图修复它时,我看到一些字段是动态计算的,这使得数据库执行简单的选择查询非常慢。从那以后,我不再计算任何字段,我只是按原样存储数据。
这是推荐吗?什么时候存储数据比计算数据更好?
多谢你们。
可能重复:
存储与计算聚合值
在一份旧工作中,我们有这个数据库,它没有被规范化,有些表不再使用,它是一个接一个的补丁。总之,这是一团糟。
有一次,当我试图修复它时,我看到一些字段是动态计算的,这使得数据库执行简单的选择查询非常慢。从那以后,我不再计算任何字段,我只是按原样存储数据。
这是推荐吗?什么时候存储数据比计算数据更好?
多谢你们。
这取决于。
存储派生值可以加快处理以后的读取请求,因为不需要再次计算这些值。
但是,以这种方式对数据进行非规范化存在一个关键问题:您必须确保派生值不可能变得过时而未被检测到。如果您的数据不是足够正常的形式,则不一致可能会蔓延并造成麻烦。这意味着在任何地方更新派生值的数据也必须刷新派生值,或者以某种方式将其标记为需要在被依赖之前更新。通过触发器更新派生值可能会减轻必须将此逻辑添加到代码中的许多位置,但请注意触发器有自己的一组潜在问题(意外的锁定问题,业务逻辑层中的代码不期望它没有的值' t 显式引用更新,可以禁用触发器,等等)。
通常,存储数据比动态计算更快。但是,如果您要存储数以万计的变量,这可能不成立。