对于我们的一个应用程序,我们有非常大的 SQL 表,它有 1 亿行,我们正在使用 Azure SQL 托管实例。每天,用户要么插入新记录,要么更新非常旧的记录。这是所有其他系统通过 SQL 复制引用到其他本地服务器的核心表。所以真正的问题是,
- 用户每天都会参考此表进行 CRUD 操作。
- 其他下游系统也从 Azure 本地引用此表数据。
- 报告和 UI 列表屏幕非常频繁地用于此表,以通过连接其他表来提取数据。当此表与其他表连接时,性能总是下降。
ABC 映射表有 1 亿行,少于 10 列。该表具有下面的列以及日期和审计列。ABCID 是 ABC 表的主键
A是A表的primaryKey
B是B表的主键
C是C表的主键
一个表有少于 20k 条记录和 20 列。
B 表有 1500 行 20 列。
C 表有 150k 行,30 列。
在 UI 中,我们显示了来自所有这 4 个表的近 30 列以及过滤器。我们添加了集群列存储、非集群列存储、NC 覆盖所有内容但无法提高性能。UI 中的过滤搜索条件将是所有 4 个提到的表中的任何列值。特别是在具有更多列的 C 表上。
为 CRUD 操作、实时报告以及对本地系统的数据引用处理这个大表的最佳方法是什么?
尝试了以下事情
- 通过组合所有这些表并添加不同的索引来创建索引视图。查询性能有所改善,但在 CRUD 操作期间会导致基表出现性能问题。
- 通过将所有这些表组合为视图并在复制表中添加索引来创建新的去规范化复制表,基表没有性能问题,但在去规范化表中读取性能不佳。
请建议处理所有这些情况的好选择。