我正在开发一个在SQL数据库中存储大量数据的软件应用程序。一个数据库用于包含实时事务的联机数据库,另一个报表数据库用于存储来自联机数据库的存档数据。有一个迁移线程可以不断地将联机数据库中的事务复制到报表数据库。
在线数据库经常被清除,以仅保留有限的数据,并且报告数据库在更长的时间段内具有该数据。
最近的一个要求是将数据在报告数据库中保留10年,但这肯定会影响报告查询的性能。
我想为报告数据库中的每个表都创建一个PurgedRecords表,用于存储已清除的记录并将有限的数据保留在实际表中。我不是SQLMaven,但我认为应该有一些更好的方法来实现这一点。另一个选择是使用复制的报告数据库而不清除。
请分享您的想法。
SQL Server 2019标准版/企业应用程序端:C#.NET windows 服务. .NET 4.8
1条答案
按热度按时间vatpfxk51#
最近 的 一 个 要求 是 将 数据 在 报告 数据 库 中 保留 10 年 , 但 这 肯定 会 影响 报告 查询 的 性能 。
如果 您 的 数据 库 架构 正确 , 就 不会 有 问题 。 如果 您 有 效率 地 设计 和 实 作 数据 库 , 则 静态 数据 的 大小 不会 影响 效能 。
B-Tree 索引 的 搜索 时间 复杂 度 是
O(log(n))
, 这 是 非常 快 的 。 Columnstore 索引 对于 聚合 和 列 类型 的 查询 也 是 非常 快 的 。 尽管 Stu 的 评论 , 但 很少 需要 对 表 本身 进行 分区 , 因为 索引 已经 为 您 * 分区 * 了 数据 , 比 线性 分区 更 有效 。如果 您 需要 更 具体 的 建议 , 请 提供 表 、 索引 和 查询 定义 及其 实际 执行 计划 。
长话短说 , 不要 过早 地 过度 优化 , 直到 您 遇到 并 完全 了解 您 的 根本 性能 问题 是 什么 。 我 说 这 句 话 是 因为 我 有 处理 " * 大 数据 * " 的 经验 , 在 普通 硬件 上 , 查询 时间 不到 一 秒 。