多集群指数效应

时间:2010-08-30 06:57:35

标签: sql sql-server

我的问题是关于表上聚集索引的限制。 理论上,在单个表中我们只能有一个集群索引。但是如果我在表格中有datetime列会说“From date”和“To date”怎么办? WHERE子句中经常需要这些列来填充我的应用程序中的报表。如果我还需要同一个表中的主键上的集群索引,那么仍然如何在其他列上利用集群索引?在这种情况下,我的查询仍会以更大的记录运行得更慢。

5 个答案:

答案 0 :(得分:2)

实际上,您还可以在表上只有一个聚簇索引 - 因为表的数据是按该聚簇索引进行物理排序的。

如果在WHERE子句中经常需要两个日期时间列,那么最好的选择是在这两列上包含非聚集索引,并且可能包含您经常使用这些查询检索的其他列,以使其成为covering index

在查询性能方面,良好的覆盖非聚集索引和聚簇索引之间没有太大区别。

但是,您不希望膨胀聚簇索引,因为这些列也将添加到同一个表上的所有非聚集索引中 - 保持较小,最好是INT,不断增加,稳定(不更改) )你应该没问题。

答案 1 :(得分:1)

另一个选项是索引(或物化)视图:您可以在表上创建多个视图,每个视图具有不同的聚簇索引。这在报告方案中可能很有用,但索引视图有很多限制,会影响修改表数据的查询的性能。联机丛书拥有您创建和测试它们所需的所有信息。

我怀疑您真正的要求确实是实施报告解决方案,如果是这样,那么最好是正确地做到这一点:创建一个单独的数据库,其中包含针对报告优化的模式(Google“星型模式”)并定期加载数据从主数据库进入报告之一。但这是一个需要调查的全新发展领域,我不会急于求成。

答案 2 :(得分:0)

如果您需要为同一个表的多个索引执行集群索引表,我看到的唯一路由是为每个集群索引保留表的副本。

答案 3 :(得分:0)

聚集索引会影响表中数据的物理存储,因此根据定义,只能有一个。您可以扩展聚簇索引以包含其他列,但这可能有其自身的缺点。

聚簇索引的性能优势在于记录以反映索引的方式存储(这就是随机插入和更新聚簇索引的原因非常快速地对表进行分段),因此基于此索引查询性能可以和从存储设备读取的性能一样好,你不能在其他索引上得到它。

答案 4 :(得分:0)

我建议您选择从聚类中获得最大收益的索引,并将其作为聚簇索引。使其余索引非群集。您可能希望运行一些测试,以找出将不同的索引与非群集进行聚合所带来的好处。

分享并享受。