因此,我有一個表,通常在 24 小時內向其中插入大約 300-500K 行。資料也是不斷從這張表中查詢出來的。有一個 Intime 列,其中包含插入資料的日期和時間。資料需要自日期起保留 3 個月。最終用戶還可以呼叫一個 API,該 API 將在同一時間段內更新用戶所有記錄的狀態標志。通常我們只是根據月份或日期對表進行磁區,并設定一個滾動磁區來處理這個問題。
但是考慮到實際上可以通過單個查詢跨磁區更新資料,對表進行磁區是否有任何缺點。任何有關如何處理此類表格的設計建議也將受到贊賞。
CREATE TABLE [dbo].[tbl_Message](
[MessageId] [bigint] IDENTITY(1,1) NOT NULL,
[MessageText] [nvarchar](max),
[UserId] [varchar](100),
[Status] [bit] NULL,
[Intime] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
uj5u.com熱心網友回復:
更新單個查詢中碰巧位于不同磁區中的行不是問題,AFAIK。無論是否使用表磁區,索引都是提高性能和并發性的關鍵。
表磁區可以提高帶有滑動視窗的大表的可管理性,但在這樣做之前有一些注意事項。滑動視窗需要對齊,因此必須對所有索引進行磁區,并且磁區列需要是主鍵(大概MessageID在這里)和所有其他唯一索引的一部分。
此外,未指定磁區列的查詢將需要觸及所有磁區。因此,像這樣的查詢SELECT * [dbo].[tbl_Message] WHERE MessageID = 1; 將需要 90 次以上的索引查找,并在 3 個月內每天滑動一次以回傳一行。請務必檢查執行計劃以避免性能下降。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/533819.html
標籤:数据库sql服务器表分区
