我想知道对于以下情况最好的方法是什么:
我在数据库中有一个订单表,显然包含所有订单。但这些实际上是所有订单,因此包括刚刚标记为“完成”的完整/完成的订单。我想从所有未结订单中计算一些内容(例如未结金额、未结项目等)。什么会更好的性能明智:
保留 1 个包含所有订单(包括完整/存档订单)的订单表,并通过过滤“完整”标志进行计算?
或者我应该创建另一个表,例如“Orders_Archive”,以便订单表仅包含我用于计算的未结订单?
这些方法是否有任何(明显的)性能差异?
(顺便说一句,我使用的是 PostgreSQL 数据库。)
这是数据库设计中的一个常见问题:是否分离或“归档”不再“活动”的记录的问题。
最常见的方法是:
- 所有内容都在一张表中,根据需要将订单标记为“完整”。优点:最简单的解决方案(代码和结构方面),良好的灵活性(例如,易于“复活”订单)。缺点:表可能变得非常大,这对于查询和例如查询来说都是一个问题。备份。
- 将旧内容归档到单独的表中。解决了第一种方法的问题,但代价是更加复杂。
- 使用具有基于值的分区的表。这意味着从逻辑上(对于应用程序而言)所有内容都在一张表中,但在幕后 DBMS 根据某些列上的值将内容放入单独的区域中。您可能会使用“完整”列或“订单完成日期”进行分区。
最后一种方法结合了前两种方法的优点,但需要 DBMS 的支持,并且设置起来更复杂。
Note:
仅存储“归档”数据的表通常称为“归档表”。一些 DBMS 甚至为这些表提供特殊的存储引擎(例如 MySQL),这些引擎经过优化以允许快速检索和良好的存储效率,但代价是更改/插入缓慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)