代码之家  ›  专栏  ›  技术社区  ›  Benjamin

在完全相关Int和VarChar上索引非规范化表

  •  0
  • Benjamin  · 技术社区  · 4 年前

    我使用的是一个非规范化的表,它每天收集大约35000行数据。

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

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

    也就是说,这两个字段InstrumentId(INT)和InstrumentName(VarChar(50))是从同一个规范化表中记录的。我们将两者都包含在非规范化数据中,这样我们就可以显示名称而无需连接,还可以查询INT。(数据库有大约200个唯一的工具)

    尽管我们为了查询而包含INT,但有时我们很懒,喜欢查询VarChar,因为它更容易验证条件。

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

    将两者都作为指数添加是一种合理的方法,还是会让人头疼?请参考讨论这些问题的阅读材料。

    我已经看过了 this question ,其中讨论了选择其中一个或另一个的选项,但我很难找到关于两者都使用的参考资料。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Chamika Goonetilaka    4 年前

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

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