0

我正在使用每天收集大约 35,000 行的非规范化表。

数据以自动化方式从我们的生产数据库中进行非规范化。对数据进行非规范化的主要动机之一是基于 C# 的 UI 使用了许多复杂的、非持久性的计算,为了保证质量,我们不想通过视图重新创建这些计算。

目前,我们在此表上没有任何索引,但正在探索添加它们。我是一名统计学家,我仍在努力思考所有索引的细微差别。我遇到的最大问题是索引完全相关的 INT 和 VARCHAR 的后果。

也就是说,InstrumentId (INT) 和 InstrumentName (VarChar(50)) 这两个字段是从同一个规范化表中记录的。我们将两者都包含在非规范化数据中,这样我们就可以在没有连接的情况下显示名称,也可以在 INT 上进行查询。(该数据库有大约 200 种独特的乐器)

尽管我们出于查询的目的包含了 INT,但有时我们很懒,喜欢在 VarChar 上进行查询,因为它更容易验证条件。

当我们开始添加索引时,我很好奇将 INT 和 VARCHAR 索引为单独的非聚集索引会有什么影响。考虑因素包括速度、存储、碎片等。

将两者都添加为索引是一种合理的方法,还是可能会在未来造成麻烦?对讨论这些问题的阅读材料的参考表示赞赏。

我看过这个问题,它讨论了选择一个或另一个的选项,但我正在努力寻找有关使用两者的参考资料。

4

1 回答 1

0

由于您有一个具有重复值的非规范化表,因此建议首先创建一个聚集列存储索引。它不仅会提高查询性能,还会减小表的大小。

创建聚集列存储索引后,您可以根据执行的查询随时添加索引。这种方法比从一开始就盲目地创建索引要好。为了识别丢失的索引,您可以使用内置工具,例如实际执行计划,它将显示任何丢失索引的警告。

于 2021-03-28T03:41:11.723 回答