Sql-Server

此場景的最佳索引

  • December 30, 2015

我們的數據庫中有一張表

tblCustomText(
 ParentID int NOT NULL,
 CustomFieldID int NOT NULL,
 Value char(50) NOT NULL, 
 Log_CreateDate datetime NOT NULL
)

(ParentID+CustomFieldID) 是唯一的。

讀取操作類似於:SELECT Value WHERE ParenID=@p1 AND CustomFieldID = @p2(有時使用 JOIN 代替 WHERE)

寫操作:85% 是 INSERT,13% 是 UPDATE,2% DELETE。(通過 ParentID+CustomFieldID)

現在,我想知道應該為這個表定義哪些索引?(它包含〜6M行)

似乎以下內容就足夠了:

CREATE TABLE dbo.tblCustomText
(
 ParentID int NOT NULL,
 CustomFieldID int NOT NULL,
 Value char(50) NOT NULL, 
 Log_CreateDate datetime NOT NULL,
 PRIMARY KEY CLUSTERED (ParentID, CustomFieldID)
);

稍後您可能還會發現您正在按日期查詢,因此您可能希望在Log_CreatedDate列上使用非聚集索引。

由於 ParentID + CustomFieldID 是唯一的並且不是 NULL,我建議您在這兩個欄位的組合上創建一個集群主鍵。

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