我已經對索引列的順序做了一些研究,但並非100%確定,所以請耐心等待! 我有如下表:索引中列的順序 - 插入性能
CREATE TABLE [Valuation]
(
[ValuationID] [int] IDENTITY(1, 1)
NOT NULL
CONSTRAINT [PK_Valuation] PRIMARY KEY ,
VersionID INT NOT NULL ,
AlphanumericIdentifier VARCHAR(255) NOT NULL,
...
other columns
...
)
我做很多連接在該表上別人上VERSIONID和AlphanumericIdentifier,所以我把一個指標就可以了:
CREATE NONCLUSTERED INDEX [IX_Valuation] ON [dbo].[Valuation]
(
[VersionID] ASC,
[AlphanumericIdentifier] ASC
)
兩個問題:
- 這些連接通常是針對特定的版本ID完成的,因此這是最具選擇性的列,應該是索引中的第一個 - 對嗎?
- 插入始終爲單個版本完成,比上一個版本多1個。這應該減少插入的性能,因爲插入的行是可以添加到索引末尾的「塊」。這是正確的嗎?
我很確定我對1,但2是正確的?
感謝 喬
您是否在使用標識列來查看任何內容? VersionID + Alphenumericidentifier的組合是唯一的嗎?也許你應該考慮兩列上的PK,而不是在身份列上,如果它實際上不會被使用。 – 2013-04-22 15:42:25
這聽起來像'VersionID'應該是PK(和身份證) – Lamak 2013-04-22 15:42:36
VersionID + Alphenumericidentifier不是唯一的。他們**應該**與另一個varchar字段一起是唯一的,但由於涉及風險,我不能在項目的這個階段引入唯一的索引。但是,如果我可以倒退時間,聽起來像是一個好主意......另一個限制是我需要向文件中的第三方供應商發送唯一的ID。這將高達10 + 255 + 255 = 560個字符,這可能會導致他們的問題。目前我們只給他們一個int PK,只有最多10個字符就可以了 – nonpoliticaltag 2013-04-22 15:53:00