Sql-Server

對於帶有 WHERE 子句的 UPDATES,列儲存是一個不錯的選擇嗎?

  • January 28, 2021

我正在 SQL Server 上開發一個數據庫項目,我正在考慮使用列儲存索引是否是一個好主意。

該項目由一個表 (A) 組成,該表將包含大量行,一列具有許多重複值。每天,都會將一組新行添加到表中,每個包都有一個“DateId”。

之後,我將需要更新與 A 連接的不同表 (B),並為“DateId”和其他列過濾 A。

SQL 中的範例:

CREATE TABLE A (
 [Id] [BIGINT] IDENTITY(1,1) NOT NULL,
 [DateId] [INT] NOT NULL,
 [B_Id] [BIGINT] NOT NULL,
 -- other columns...
 INDEX cci_A CLUSTERED COLUMNSTORE
)

CREATE TABLE B (
 [Id] [BIGINT] IDENTITY(1,1) NOT NULL,
 -- other columns...
 INDEX cci_B CLUSTERED COLUMNSTORE
)

UPDATE B
SET ...
FROM A
INNER JOIN B ON A.B_Id = B.Id
WHERE A.DateId = @myDateId

在這種情況下,列儲存是一個不錯的選擇嗎?

修改一行將導致舊行被標記為“已刪除”(但它仍在列儲存索引中),並將新行添加到增量儲存(基於行的儲存,當它達到約 100 萬時將被壓縮)行)。因此,您可以想像,隨著時間的推移,許多更新會在一定程度上降低您的列儲存索引。您當然可以進行索引維護,但 B 上的列儲存索引可能不是最佳選擇…

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