我不是经过培训的DBA,但执行一些SQL任务并提出这个问题:
在SQL数据库中,我注意到使用归档表模仿具有完全相同字段的另一个表,并且当该数据被认为是存档时用于接受原始表中的行。由于我已经看到这些表位于同一个数据库和同一驱动器上的示例,我的假设是这样做是为了提高性能。这些表格中的行数不超过1000万行......
答案 0 :(得分:6)
存档的概念是物理的,而不是逻辑的。逻辑上,归档表包含完全相同的实体,并且应该是同一个表。
身体问题往往是务实的。最重要的概念是“数据库过于(大/慢”)。存档记录可以更轻松地执行以下操作:
以不同方式优化索引结构。归档表可以包含更多索引,而不会影响工作表上的插入/更新性能。此外,索引可以使用完整页面重建,而工作表通常希望页面具有50%的完整和平衡。
以不同方式优化存储媒体。您可以将存档表放在速度较慢/较便宜的可能具有更大容量的磁盘驱动器上。
以不同方式优化备份策略。工作表可能需要热备份或日志传送,而存档表可以使用快照。
如果您正在使用它,请以不同方式优化复制。如果存档表每天仅通过夜间批处理更新一次,则可以使用快照而不是事务复制。
不同级别的访问权限。您可能希望存档表具有不同的安全访问级别。
锁定争用。如果你的工作表非常热,你宁愿让你的MIS开发人员访问存档表,他们在运行某些东西时不太可能停止你的操作而忘记指定脏读语义。
最佳做法是不使用归档表,而是将数据从OLTP数据库移动到具有非规范化数据的MIS数据库,数据仓库或数据集市。但是一些组织将难以证明额外数据库系统的成本(这并不便宜)。将附加表添加到现有数据库的障碍要少得多。
答案 1 :(得分:0)
我经常说这个,但是......
相同结构的多个表几乎没有意义。
状态标志是一个更好的主意。有适当的方法来提高性能(分区/索引),而不会使数据非规范化或以其他方式创建冗余。在现代rdbms世界中,1000万条记录相当小,所以你所看到的是数据库规划不当或误解的结果。