首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server:表中的最大行数

SQL Server:表中的最大行数
EN

Stack Overflow用户
提问于 2009-04-17 06:20:46
回答 12查看 219.6K关注 0票数 81

我开发的软件将大量数据存储在其中一个数据库表(SQL Server版本8、9或10)中。假设每天大约有100,000条记录插入到该表中。这大约是每年3600万条记录。为了避免损失性能,我决定每天创建一个新表(名称中包含当前日期的表),以减少每个表的记录数。

你能告诉我,这是不是一个好主意?SQL server表是否有记录限制?或者,您是否知道在性能显著降低之前,一个表中可以存储多少条记录(或多或少)?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-04-17 06:27:34

这很难给出一个通用的答案。这真的取决于许多因素:

  • 您的行有多大
  • 您存储的数据类型(字符串、blobs、数字)
  • 您如何处理数据(只需将其存档,定期查询)
  • 您的表上是否有索引-有多少

<>H19您的服务器规格

等。

正如这里其他地方回答的那样,每天100,000,000,因此每个表都是多余的-我建议每月或每周,甚至每季度。表越多,维护/查询的噩梦就越大。

票数 37
EN

Stack Overflow用户

发布于 2010-10-07 04:51:49

这些是Maximum Capacity Specifications for SQL Server 2008 R2的一部分

terabytes

  • File

  • 数据库大小: 524,272 terabytes

  • Databases / SQL Server实例: 32,767

  • Filegroups /数据库:32,767个
  • 文件大小(数据):32,767个
  • 文件大小(数据):16 terabytes
  • File大小(日志):2 terabytes
  • Rows /表:受每个数据库的可用storage
  • Tables限制:受数据库中对象数量的限制
票数 94
EN

Stack Overflow用户

发布于 2014-03-04 21:48:56

在SQL Server2008 R2中,我有一个包含60多亿行的三列表。

我们每天查询它,为我们的客户创建每分钟的系统分析图表。我没有注意到任何数据库性能影响(尽管它每天增长约1 GB的事实确实使管理备份比我希望的要复杂一些)。

更新2016年7月

在备份变得足够大以便我们决定截断超过两年的记录(存储在多个备份中的大约700 GB,包括昂贵的磁带)之前,我们达到了约2450亿行。值得注意的是,在这个决定中,性能并不是一个重要的动机(也就是说,它仍然工作得很好)。

对于任何想要从SQL Server中删除200亿行的人,我强烈推荐this article。链接失效时的相关代码(完整解释请阅读文章):

代码语言:javascript
复制
ALTER DATABASE DeleteRecord SET RECOVERY SIMPLE;
GO

BEGIN TRY
    BEGIN TRANSACTION
        -- Bulk logged 
        SELECT  *
        INTO    dbo.bigtable_intermediate
        FROM    dbo.bigtable
        WHERE   Id % 2 = 0;

        -- minimal logged because DDL-Operation 
        TRUNCATE TABLE dbo.bigtable;  

        -- Bulk logged because target table is exclusivly locked! 
        SET IDENTITY_INSERT dbo.bigTable ON;
        INSERT INTO dbo.bigtable WITH (TABLOCK) (Id, c1, c2, c3)
        SELECT Id, c1, c2, c3 FROM dbo.bigtable_intermediate ORDER BY Id;
        SET IDENTITY_INSERT dbo.bigtable OFF;
    COMMIT
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

ALTER DATABASE DeleteRecord SET RECOVERY FULL;
GO

更新2016年11月

如果您计划在单个表中存储如此多的数据:请不要这样做。我强烈建议您考虑表分区(如果您运行的是Enterprise edition,则可以手动分区,也可以使用内置功能)。这使得删除旧数据就像每(周/月/等)截断一次表一样简单。如果您没有Enterprise (我们没有),您可以简单地编写一个脚本,该脚本每月运行一次,删除超过2年的表,创建下个月的表,并重新生成一个动态视图,该视图将所有分区表连接在一起以便于查询。显然,“每月一次”和“超过两年”应该由你根据你的用例来定义。直接从具有数百亿行数据的表中删除将a)花费大量时间,b)将事务日志填满成百上千倍。

票数 60
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/759244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档