Mar*_*mke 73 sql-server database-design
我开发的软件在其数据库表(SQL Server版本8,9或10)中存储了大量数据.假设每天大约有100,000条记录插入到该表中.这大约是每年3600万条记录.由于担心我会失去性能,我决定每天创建一个新表(一个名称中包含当前日期的表)以降低每个表的记录数.
你能告诉我,这是不是一个好主意?SQL服务器表是否有记录限制?或者您知道在性能显着降低之前可以在表中存储多少条记录(或多或少)?
小智 88
这些是SQL Server 2008 R2的一些最大容量规范
Dan*_*ard 44
我有一个三列表,在SQL Server 2008 R2中有超过60亿行.
我们每天都会查询它,为我们的客户创建逐分钟的系统分析图表.我没有注意到任何数据库性能命中(尽管事实上它每天增长~1 GB确实使管理备份比我想要的更多一些).
2016年7月更新
在备份变得足够大以至于我们决定截断两年以上的记录(大约700 GB存储在多个备份中,包括昂贵的磁带上)之前,我们已经达到了大约245亿行.值得注意的是,在这个决定中,绩效并不是一个重要的动力(即,它仍然很有效).
对于那些发现自己试图从SQL Server中删除200亿行的人,我强烈推荐这篇文章.链接死亡时的相关代码(阅读文章以获得完整说明):
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
Run Code Online (Sandbox Code Playgroud)
2016年11月更新
如果您打算将这么多数据存储在一个表中:不要.我强烈建议您考虑表分区(如果您正在运行企业版,则需要手动或使用内置功能).这使得丢弃旧数据就像截取表格一样简单(周/月/等).如果您没有Enterprise(我们没有),您只需编写一个每月运行一次的脚本,删除超过2年的表,创建下个月的表,并重新生成一个连接所有分区的动态视图桌子在一起,便于查询.显然,"每月一次"和"超过2年"应由您根据对您的用例有意义的内容来定义.直接从具有数百亿行数据的表中删除将a)花费大量时间并且b)将事务日志填满数百或数千次.
Ras*_*ack 34
很难给出一个通用的答案.这实际上取决于多种因素:
等等
正如在这里的其他地方所回答的那样,每桌10万次,因此每张桌子都是矫枉过正 - 我建议每月或每周甚至每季度一次.表格越多,维护/查询的噩梦就越大.
pax*_*blo 19
我不是特别了解MSSQL,但3600万行对于企业数据库并不大 - 使用大型机数据库,100,000行听起来像配置表给我:-).
虽然我不是微软某些软件的忠实粉丝,但这不是我们在这里谈论的Access:我认为他们可以使用企业DBMS处理相当大的数据库大小.
我怀疑,如果确实需要分裂的话,几天的分辨率可能太过分了.
这取决于情况,但我想说,为了简单起见,最好将所有内容都放在一张表中。
每天 100,000 行并不是一个很大的数字。(取决于您的服务器硬件)。我亲眼目睹 MSSQL 在单个表中处理多达 100M 行,没有任何问题。只要你保持索引有序,一切都应该很好。关键是要有足够的内存,这样索引就不必交换到磁盘上。
另一方面,这取决于您如何使用数据,如果您需要进行大量查询,并且不太可能需要跨越多天的数据(因此您不需要联接表),那么它将是更快地将其分成多个表。这通常用于工业过程控制等应用,您可能每 10 秒读取 50,000 个仪器上的值。在这种情况下,速度极其重要,但简单性则不然。
我们在SQL Server 2005和2008中有表,其中包含超过10亿行(每天增加3000万行).我无法想象每天都会把那个分成一张新桌子的老鼠窝弄下来.
添加适当的磁盘空间(无论如何你需要)和RAM要便宜得多.
归档时间: |
|
查看次数: |
174295 次 |
最近记录: |