我希望您就如何处理与MSSQL数据库相关的数据增长提出意见。为了简单起见,我将讨论仅限于一个表格。假设表增长以包含大量数据,即尽管存在索引,但是检索数据的时间对于最终用户是显而易见的。
现在,并非所有数据都需要随时可用,尽管我们需要这样做。换句话说,我们可以“归档”一些旧数据。我们当前的策略只是将“存档”数据移动到另一个表,以便“日常”查询快速,我们可以在需要时通过组合这两个表来访问“存档”数据。
答案 0 :(得分:1)
使用表格分区。
阅读这些链接,作者通过示例对其进行了详细介绍。 http://blog.sqlauthority.com/2008/01/24/sql-server-2005-introduction-to-partitioning/
答案 1 :(得分:0)
我已经看过很多了,它肯定能奏效。如果您正在使用存储过程,则可以维护两个集合,其中一个仅用于日常,第二个集合将引用两个表或组合这两个集合的视图。
根据您执行此操作的时间长短,您仍可能最终得到一个存档表,该表在某些时候有大量数据,因此您可能需要查看具有结束日期的策略,然后再将数据移至离线状态存储或第三个表未作为过程的一部分进行搜索。
答案 2 :(得分:0)
对于SQL Server 2005+,请查看table partitioning。
答案 3 :(得分:0)
作为对其他答案的一点澄清,这两种策略都可以正常运行,具体取决于您使用的是哪个版本的Sql Server。如果您有企业版,那么表分区就是我的方式,因为它在开发方面需要较少的工作。不幸的是,微软只将表分区限制在企业版,尽管它几乎是所有其他数据库中的一个功能,包括免费的开源替代品。如果你被困在没有企业版的情况下(正如许多人认为的那样> $ 20k / cpu定价),那么转移到你最初建议的手动分区方法是一个不错的选择。另一种不需要企业版的替代方案是使用覆盖索引。一个好的方法是使用视图并在视图上创建物化索引,它基本上只创建磁盘上所需数据的副本,而不会产生自己移动数据的开销。假设您创建了一个带有where子句的视图,只包含今天的数据,然后在视图上创建了一个物化索引,实际上会有一个索引包含今天磁盘上的所有数据,并且返回的速度与您拥有的一样快手动分区数据。不幸的是,视图的复杂性有许多限制,你可以创建一个索引,但值得一试,当它工作正常时。