【问题标题】:SQL Database Best Practices - Use of Archive tables?SQL 数据库最佳实践 - 使用存档表?
【发布时间】:2014-02-06 03:41:11
【问题描述】:

我不是受过训练的 DBA,但执行了一些 SQL 任务并有这个问题:

在 SQL 数据库中,我注意到使用存档表来模仿具有完全相同字段的另一个表,并且当该数据被认为需要存档时,这些表用于接受来自原始表的行。由于我已经看到这些表驻留在同一数据库和同一驱动器上的示例,因此我的假设是这样做是为了提高性能。此类表中的行数不超过 1000 万行...

  • 为什么要这样做而不是使用列来指定行的状态,例如用于 in/active 标志的布尔值?
  • 这会在什么时候提高性能?
  • 考虑到数据可能仍需要查询(或与当前数据合并),正确构建此结构的最佳模式是什么?
  • 对此还有什么要说的?

【问题讨论】:

    标签: sql design-patterns archive database-administration


    【解决方案1】:

    归档的概念是物理的,而不是逻辑的。从逻辑上讲,存档表包含完全相同的实体并且应该是同一个表。

    身体问题往往是务实的。总体概念是“数据库变得太快(大/慢”)。归档记录可以更轻松地执行以下操作:

    1. 以不同方式优化索引结构。存档表可以有更多索引,而不会影响工作表上的插入/更新性能。此外,可以使用完整页面重建索引,而工作表通常需要 50% 完整且平衡的页面。

    2. 以不同方式优化存储介质。您可以将存档表放在容量更大的速度较慢/价格较低的磁盘驱动器上。

    3. 以不同方式优化备份策略。工作表可能需要热备份或日志传送,而存档表可以使用快照。

    4. 如果您正在使用它,请以不同方式优化复制。如果归档表每天仅通过夜间批处理更新一次,您可以使用快照而不是事务复制。

    5. 不同的访问级别。也许您希望存档表具有不同的安全访问级别。

    6. 锁定争用。如果您的工作表非常热,您宁愿让您的 MIS 开发人员访问存档表,这样他们在运行某些东西时不太可能停止您的操作并忘记指定脏读语义。

    最佳做法是不使用存档表,而是将数据从 OLTP 数据库移动到 MIS 数据库、数据仓库或具有非规范化数据的数据集市。但是一些组织很难证明额外的数据库系统的成本(并不便宜)。向现有数据库添加额外表的障碍要少得多。

    【讨论】:

    • 您的最后一段似乎与您的第一段相矛盾,您能详细说明一下吗?你听起来好像档案应该在同一张桌子上,但很少。那么......这里有什么戏?
    【解决方案2】:

    我经常这么说,但是……

    多个相同结构的表几乎没有意义。

    状态标志是一个更好的主意。有一些适当的方法可以提高性能(分区/索引),而不会对数据进行非规范化或以其他方式创建冗余。 1000 万条记录在现代 rdbms 的世界中是非常少的,所以您看到的是数据库规划不当或误解的产物。

    【讨论】:

      猜你喜欢
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2011-05-04
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多