SQL Server 2008中的最大表容量


11

我有一个应用程序,每年将超过10亿行插入到表中。该表包含一些varcharbigint列以及一个blob列。

10亿行包含历史数据,这些数据被保留以进行跟踪。因此,我想知道如果我根据有关最大表大小的MSDN文章继续采用这种结构,是否会存在表容量限制。

该链接中提到的数据文件大小是否指向表数据文件组?


@marc_s感谢您抓住这一点。随时加入我们的“堆”中,除其他外,我们共同关注这些问题
JNK 2012年

每行的最大大小是多少?
Nick Chammas

Answers:


6

除磁盘空间外,没有实际限制。我完整阅读了链接到的表并进行了检查。

如果需要超过16TB,则需要多个文件(一个简单的过程)。


我猜这可以通过对表进行分区并让分区具有不同的文件组来实现,如果我正确的话?
GAP 2012年

1
甚至没有必要。只需添加一个新文件(到现有文件组)。SQL Server将开始平均填充所有文件。如果一个文件无法再增长,它将仅增长另一个文件。
usr 2012年

2

sql server 2008中的表可以处理大量记录,正如@usr所提到的,它取决于磁盘空间,但是建议您如果表有很多行并且不断增长,请使用分区表 http://technet.microsoft。 com / zh-CN / library / dd578580(v = sql.100).aspx

当数据库表的大小增长到数百GB或更多时,加载新数据,删除旧数据和维护索引可能会变得更加困难。

有关它的更多信息

http://msdn.microsoft.com/en-us/library/ms190787.aspx

以及如何实现它 http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizo​​ntal-partition-database-table/


不过,您在分区时需要非常小心。功能和键以及用例需要仔细考虑。要进行分区的逻辑字段可能永远不会在任何查询中使用,这会降低性能。
JNK 2012年

正确,但单个表中的数十亿行也会影响性能,还可以选择在许多表中拆分数据,例如每年分离一张表,如果您想查看所有数据,则可以使用A视图,但在至少每个表格的未插入和更新操作都会更快
AmmarR 2012年

在巨大表上的插入不一定很慢,它取决于键和索引。我每月将大约3000万行的数据加载到一个具有700m现有行的表中,并且我们不进行任何分区。我确实尝试了分区,但造成的问题多于解决的问题。 如果您想签出,这实际上是一个问题。
JNK 2012年

我当时正在考虑将历史记录数据移到一个单独的表中并创建一个联合视图,以便应用程序在需要查询历史记录+最新数据时可以使用它,该数据少于我在系统中查询的25%。这将比拥有多个数据文件或根据将数据标记为最新的列对表进行分区有效吗?从IO操作中哪个会更有效?引起我怀疑的是,从IO角度来看,这两种解决方案是否相同。
GAP 2012年

您采用的任何方法都有其最佳实践,它可能会使它变好或变坏。我的意思是,如果您有多个表,那么查询的内容将很复杂且难以维护,如果您有一个表并使用表分区,则存在一些不同的注意事项,例如您的sql版本应该是企业版,建议使用许多数据文件以实现更好的IO操作,但也有其最佳实践,对于sql性能,没有直接的方法...
AmmarR 2012年

0

也许分区视图会起作用。

使用分区视图的MSDN文章

分区视图允许将大表中的数据拆分为较小的成员表。根据列之一中数据值的范围,在成员表之间对数据进行分区。每个成员表的数据范围是在分区列上指定的CHECK约束中定义的。然后定义一个使用UNION ALL将所有成员表的选择组合到单个结果集中的视图。当引用该视图的SELECT语句在分区列上指定搜索条件时,查询优化器将使用CHECK约束定义来确定哪个成员表包含行。

我不确定它与AmmarR在回答中提供有关信息的分区表有何不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.