我已經被這樣的主鍵BIGINT和身份,超過聚集索引更喜歡非聚集索引任何理由
CREATE TABLE [dbo].[MyTable](
[MyTableId] [bigint] IDENTITY(1,1) NOT NULL,
[SomeTable2Id] [bigint] NOT NULL,
[SomeTable3Id] [bigint] NOT NULL,
[SomeData] [smallint] NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY NONCLUSTERED
(
[MyTableId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
從上面PK_MyTable非聚集索引
除了定義的表,我有一些其他的NONCLUSTERED索引通過SomeTable2Id和SomeTable3Id
我認爲上面創建CLUSTERED索引更有意義,但我想知道有沒有很好的理由不創建一個CLUSTERED索引,而是創建NONCLUSTERED?
PS對這些主題提出了很多問題,但找不到相關的問題(前20名)。如果有問題,請將我重定向到相關的問題。
編輯:考慮這樣MyTable
被映射其他兩個表SomeTable2
和SomeTable3
和而不是有複合鍵的情況下,我們有這個MyTableId
所以大部分時間我的查詢要麼SomeTable2Id
或SomeTable3Id
,並要求得到其他ID。因此,根據這張表格的使用情況,我們是否真的需要在MyTableId
之上創建聚集索引,或者是否有兩個非聚集索引SomeTable2Id
和SomeTable3Id
就足夠了?
謝謝。我有一個問題。在我的情況下,這個表充當兩張不同表之間的映射表。我將使用這張表進行查找。大多數時候,我不會使用它的主鍵。這是否有所作爲? – Ankush
@Ankush主鍵總是有一個索引(不管它是否是表的聚集索引的選擇)。如果您要通過其他方法訪問,請考慮對這些鍵(羣集或非羣集)編制索引。聚類指數的選擇應該是獨特的,狹窄的,靜態的,並且越來越多。如果你有幾個候選人,我會選擇最有可能用於範圍查詢的人,如果不是,可能是一個身份(如你的情況)。 –
我明白,但這並沒有解決我在上述評論中的擔憂。我想你的意思是**不會**有所作爲,並與主鍵上的聚集索引。對? – Ankush