SQLServer - 将表视为索引

Jęd*_*icz 4 index sql-server table

我的表格或多或少如下:

table Sample (
    location bigint,
    device bigint,
    timestamp datetime,
    type bigint,
    value bigint,
    )
Run Code Online (Sandbox Code Playgroud)

出于性能原因,我们也有一个强大的索引,它具有相同顺序的相同列,除了value在索引中包含而不是使用。

这按预期工作,除了 AFAIU 数据在数据库中保存两次 - 一次在表中,一次在索引中。

问题:从概念上讲,是否有某种方法可以将数据仅保留在索引中?我相信这需要以与索引组织相同的方式组织表,从而有效地消除对索引的需求。我试图创建模拟上述索引的组合主键,但它归结为自动创建相同索引。

Tib*_*szi 8

您要求的是我们在 SQL Server 世界中所说的“聚集索引”。聚集索引数据。即,索引的 b 树是您实际的表数据。

聚集索引没有包含列的概念,因为所有列都在聚集索引中——聚集索引就是数据。所以你有关键列(你用来“驱动查询”的东西,比如 WHERE 子句,可以这么说);其余的列在叶子中。

您可以将聚集索引中的非键列视为非聚集索引中的包含列。

不要将 PK 与聚集索引混淆。您决定 PK 应该带有聚集索引还是非聚集索引。

您可能有比 PK 更好的聚集索引候选者。美好的!只需使 PK 非聚集并在该更好的候选者上创建聚集索引。