Sem*_*mez 9 database postgresql performance database-design
我想知道以下情况的最佳方法是什么:
我在数据库中有一个显然包含所有订单的Orders表.但这些都是字面上的所有订单,因此包括刚刚标记为"完整"的完整/已完成订单.从所有未结订单我想要计算一些东西(如开放金额,未清项目等).什么会更好的表现明智:
保留1个订单表包含所有订单,包括完整/存档的订单,并通过过滤"完整"标志进行计算?
或者我应该创建另一个表,例如'Orders_Archive',以便Orders表只包含我用于计算的开放订单?
这些方法中是否有(明确的)性能差异?
(顺便说一下,我在PostgreSQL数据库上.)
这是数据库设计中的常见问题:是否要分离或"归档"不再"活动"的记录的问题.
最常见的方法是:
最后一种方法结合了前两种方法的优点,但需要DBMS支持,并且设置起来比较复杂.
注意:
仅存储"存档"数据的表通常称为"存档表".有些DBMS甚至为这些表(例如MySQL)提供了特殊的存储引擎,这些表经过优化,可以快速检索和提高存储效率,但代价是缓慢的更改/插入.
或者我应该创建另一个表,例如'Orders_Archive',以便Orders表只包含我用于计算的开放订单?
是.他们称之为数据仓库.人们这样做是因为它加速了交易系统,以消除几乎没有用过的历史.首先,表格在物理上更小,处理速度更快.其次,长期运行的历史报告不会干扰事务处理.
这些方法中是否有(明确的)性能差异?
是.奖金.您可以重新构建历史记录,使其不再是3NF(用于更新),而是用于星型模式(用于报告).优点是巨大的.
购买Kimball的The Data Warehouse Toolkit一书,了解有关星型模式设计的更多信息,并将历史记录从活动表迁移到仓库表中.