Sql-Server

SQLServer - 將表視為索引

  • January 8, 2021

我的表格或多或少如下:

table Sample (
   location bigint,
   device bigint,
   timestamp datetime,
   type bigint,
   value bigint,
   )

出於性能原因,我們還有一個強大的索引,它具有相同順序的相同列,但它value被包含在索引中而不是在索引中使用。

這按預期工作,除了 AFAIU 數據在數據庫中保存兩次 - 一次在表中,一次在索引中。

問題:從概念上講,有什麼方法可以將數據僅保留在索引中?我認為這需要以與索引相同的方式組織表格,從而有效地消除對索引的需求。我試圖創建模擬上述索引的組合主鍵,但它歸結為自動創建相同的索引。

您要求的是我們在 SQL Server 世界中所說的“聚集索引”。聚集索引數據。即,索引的 b 樹是您實際的表數據。

聚集索引沒有包含列的概念,因為所有列都在聚集索引中——聚集索引就是數據。所以你有關鍵列(你用來“驅動查詢”的東西,比如 WHERE 子句,可以這麼說);其餘的列在葉子中。

您可以將聚集索引中的非鍵列視為非聚集索引中的包含列。

不要將 PK 與聚集索引混淆。您決定 PK 是否應該帶有聚集索引或非聚集索引。

您可能有比 PK 更好的聚集索引候選者。美好的!只需使 PK 非聚集並在那個更好的候選者上創建聚集索引。

引用自:https://dba.stackexchange.com/questions/282806