我开发的软件将大量数据存储在其中一个数据库表(SQL Server版本8、9或10)中。假设每天大约有100,000条记录插入到该表中。这大约是每年3600万条记录。为了避免损失性能,我决定每天创建一个新表(名称中包含当前日期的表),以减少每个表的记录数。
你能告诉我,这是不是一个好主意?SQL server表是否有记录限制?或者,您是否知道在性能显著降低之前,一个表中可以存储多少条记录(或多或少)?
发布于 2009-04-17 06:27:34
这很难给出一个通用的答案。这真的取决于许多因素:
<>H19您的服务器规格
等。
正如这里其他地方回答的那样,每天100,000,000,因此每个表都是多余的-我建议每月或每周,甚至每季度。表越多,维护/查询的噩梦就越大。
发布于 2010-10-07 04:51:49
这些是Maximum Capacity Specifications for SQL Server 2008 R2的一部分
terabytes
发布于 2014-03-04 21:48:56
在SQL Server2008 R2中,我有一个包含60多亿行的三列表。
我们每天查询它,为我们的客户创建每分钟的系统分析图表。我没有注意到任何数据库性能影响(尽管它每天增长约1 GB的事实确实使管理备份比我希望的要复杂一些)。
更新2016年7月

在备份变得足够大以便我们决定截断超过两年的记录(存储在多个备份中的大约700 GB,包括昂贵的磁带)之前,我们达到了约2450亿行。值得注意的是,在这个决定中,性能并不是一个重要的动机(也就是说,它仍然工作得很好)。
对于任何想要从SQL Server中删除200亿行的人,我强烈推荐this article。链接失效时的相关代码(完整解释请阅读文章):
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)将事务日志填满成百上千倍。
https://stackoverflow.com/questions/759244
复制相似问题