集群指数日期

时间:2017-03-09 09:59:36

标签: sql-server indexing

我正在为一个项目重新设计一个数据库,因为当前版本不再符合它的实际使用现象,并且导致了严重的问题。

几个主要表格包含这种结构:

  • 对象标识符(FK,4字节int)
  • 记录的日期时间(对于不同的对象可以是重复的)
  • 价值(浮动)

从其他问题(即Composite Clustered Index in SQL Server)我收集到不应该在复合键上使用聚簇索引,最好是较小的数据类型。

此表中的数据(数百万条记录,每天增长10k)只能根据日期时间字段插入或查询(获取最小/最大值或日期范围内对象的所有值),更新和删除几乎永远不会发生,只有在查询发生的时间之外。 插入顺序通常随着日期时间的增加而增加,但是观察到轻微的差异,有时需要插入更大的积压。 潜在ID字段的顺序将正确匹配单个对象的日期时间增长,但通常不会匹配所有记录。

我的问题是:我在这种表上看到了几种不同的键/索引方法,但在这些情况下,键的哪种方法效果最好?

1 个答案:

答案 0 :(得分:1)

在您的情况下,在DATETIME列上创建单列聚簇索引是行不通的。价值观不会是独一无二的......

为了避免碎片,非常重要的是,聚簇索引是隐式排序的。最简单的是IDENTITY列......

创建聚簇索引时,聚簇索引是表。它实际上是物理存储的数据量。该索引隐式包含所有其他列。当您创建另一个索引(当然是非聚集的)时,现有的聚簇索引将用作查找表。

有数百万条记录,您偶然发现了I / O问题。必须加载许多页面才能将所有值组合在一起。 Starting with SQL Server 2012 MS introduced column store indexes,它将关系DBMS的优势与面向列的存储系统的速度相结合。该索引存储在一个块中,可以极大地加速对海量数据的查询!您支付的价格是磁盘空间和较慢的操作。

您可以使用 2-cloumn 聚集索引,将日期(首先)与IDENTITY列组合在一起。这将按照日期顺序对您的表进行物理排序。这应该也很快。

最适合您的方法取决于许多细节: