【发布时间】:2019-02-22 22:26:19
【问题描述】:
我们有一个 4-5TB 的 SQL Server 数据库。最大的表大约 800 GB,包含 1 亿行。 4-5 个其他可比较的表是这个大小的 1/3-2/3。我们经历了创建新索引以优化性能的过程。虽然性能确实有所提高,但我们发现新插入的数据查询速度最慢。
它是一个财务报告应用程序,带有在数据库之上运行的 BI 工具。尽管大部分数据是在早上 7 点之前加载的,但数据会在早上晚些时候继续加载。用户在早上 8 点左右开始通过 BI 工具查询数据,最关心的是最新的(每日)数据。
我想知道新插入的数据是否会导致索引乱序。有什么办法可以让我们在新插入的数据上获得比旧数据更好的性能。我希望我在这里已经很好地解释了这个问题。如果缺少任何信息,请告诉我。谢谢
编辑 1
让我稍微描述一下架构。 我有一个以 Date,id 作为聚集索引的基表(我们称之为 Base)。 它有大约 50 列 然后我们有 5 个派生表 (Derived1, Derived2,...) ,根据不同的度量类型,它们也有 Date,Id 作为聚集索引和基表上的外键约束。
Derived1 和 Derived2 表有 350 多列。 Derived3,4,5 大约有 100-200 列。由于 BI 工具的限制,创建了一个大视图来连接所有数据表。日期,ID 是所有表的连接列,以形成视图(因此我在这些列上创建了聚集索引)。主要关注的是关于 BI 工具的性能。 BI 工具总是使用视图并且通常会向服务器发送类似的查询。
在其他过滤列上还有其他索引。 主要问题仍然存在 - 如何防止性能恶化。 另外我想知道
- 如果 NCI 在 Date,ID 上,除了在 date,ID 上的聚集索引之外,所有表上的结果都会更好。
- 在派生表的 NCI 中包含 150 列是否有意义?
【问题讨论】:
标签: sql-server indexing sql-server-2012 left-join batch-processing