在完全相关的 Int 和 VarChar

问题描述

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

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

目前,我们在这个表上没有任何索引,但正在探索添加它们。我是一名贸易统计学家,我仍在努力解决所有索引细微差别。我的一个大问题是对完全相关的 INT 和 VARCHAR 进行索引的后果。

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

即使我们为了查询的目的包含了 INT,有时我们也很懒惰,喜欢在 VarChar 上查询,因为它更容易验证条件。

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

将两者都添加为索引是一种合理的方法,还是会在以后造成麻烦?欢迎参考讨论这些问题的阅读材料。

我查看了 this question,它讨论了选择其中之一的选项,但我正在努力寻找有关使用这两者的参考资料。

解决方法

由于您有一个包含重复值的非规范化表,建议先创建一个聚集列存储索引。不仅可以提高查询性能,还可以减少表的大小。

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