Sql-Server
SQLServer - 將表視為索引
我的表格或多或少如下:
table Sample ( location bigint, device bigint, timestamp datetime, type bigint, value bigint, )
出於性能原因,我們還有一個強大的索引,它具有相同順序的相同列,但它
value
被包含在索引中而不是在索引中使用。這按預期工作,除了 AFAIU 數據在數據庫中保存兩次 - 一次在表中,一次在索引中。
問題:從概念上講,有什麼方法可以將數據僅保留在索引中?我認為這需要以與索引相同的方式組織表格,從而有效地消除對索引的需求。我試圖創建模擬上述索引的組合主鍵,但它歸結為自動創建相同的索引。
您要求的是我們在 SQL Server 世界中所說的“聚集索引”。聚集索引是數據。即,索引的 b 樹是您實際的表數據。
聚集索引沒有包含列的概念,因為所有列都在聚集索引中——聚集索引就是數據。所以你有關鍵列(你用來“驅動查詢”的東西,比如 WHERE 子句,可以這麼說);其餘的列在葉子中。
您可以將聚集索引中的非鍵列視為非聚集索引中的包含列。
不要將 PK 與聚集索引混淆。您決定 PK 是否應該帶有聚集索引或非聚集索引。
您可能有比 PK 更好的聚集索引候選者。美好的!只需使 PK 非聚集並在那個更好的候選者上創建聚集索引。