我正在开发一个在SQL数据库中存储大量数据的软件应用程序。一个用于在线事务的数据库,另一个用于存储来自在线数据库的归档数据的报告数据库。有一个迁移线程不断地将事务从联机复制到报表数据库。
通常会清除联机数据库,使其只保留有限的数据,并使报表数据库的数据保存时间更长。
最近的请求之一是将数据保存在报告数据库中10年,但这肯定会影响报告查询的性能。
我正在考虑为reporting中的每个表创建一个PurgedRecords表,该表存储已清除的记录,并将有限的数据保存在实际表上。我不是SQL方面的专家,但我认为应该有更好的方法来实现它。另一个选项是在不清除的情况下使用复制的报表数据库。
请分享你的想法。
SQLServer2019标准/企业应用程序侧: C#.NET Windows。.NET 4.8
发布于 2022-11-17 02:18:45
最近的请求之一是将数据保存在reporting数据库中10年,但这肯定会影响报告查询的性能。
如果您的数据库架构正确,则不会。如果您有效地设计和实现数据库,rest中的数据大小不会对性能产生影响。
B树索引具有O(log(n))搜索时间复杂度,速度非常快.对于聚合和列类型的查询,Columnstore索引也非常快。尽管Stu提出了一些评论,但是很少需要对表本身进行分区,因为索引已经以比线性分区更有效的方式为您划分数据。
如果您需要更具体的建议,请提供表、索引和查询定义以及它们的实际执行计划。
长话短说,在你遇到并充分理解你的根本性能问题之前,不要过早地过度优化。我这样说的经验来自“大数据”,在温和的硬件和次秒的查询时间。
https://stackoverflow.com/questions/74462064
复制相似问题