[英]SQL Server table index columns order
如果我以不同順序使用列,則為更多列創建表索引時會有什么區別?
ID, isValid, Created
和ID, Created, isValid
索引之間到底有什么區別?
查詢順序有什么不同嗎?
where ID = 123
and isValid = 1
and Created < getdate()
與
where ID = 123
and Created < getdate()
and isValid = 1
列類型:ID [int] ,isValid [bit] ,Created [datetime] )
ID, isValid, Created
和ID, Created, isValid
索引之間到底有什么區別?
如果您始終在
WHERE
子句中使用
所有三列,則沒有區別。
( 正如馬丁·史密斯 ( Martin Smith)在其評論中所指出的那樣-由於條件不是相等檢查,因此索引中各列的順序確實很重要 )
但是:只有使用了最左邊的n列(此處為1到3之間的n),才能使用索引。
因此,如果您的查詢可能僅使用ID
和isValid
進行查詢,則可以使用第一個索引-但肯定不會使用第二個索引。
如果你有使用的查詢ID
和Created
作為他們的WHERE
參數,那么可以使用你的第二個指標,但第一個不能被使用。
AND
是可交換的,因此WHERE
中ANDed表達式的順序無關緊要。 索引中列的順序確實很重要,它應該與您的查詢匹配。
如果ID
是表的群集主鍵,並且您的查詢要求輸入特定的ID
,則不必費心創建索引。 這就像給一本書的索引說“ 123頁在123頁上”等。
查詢中的順序沒有區別。 索引中的順序有所不同。 我不確定這在文本中看起來有多好,但是可以這樣:
where ID = 123 and isValid = 1 and Created < Date 'Jan 3'
以下是一些可能的索引:
ID IsValid Created
=== ======= =========
122 0 Jan 4
122 0 Jan 3
... ... ...
123 0 Jan 4
123 0 Jan 3
123 0 Jan 2
123 0 Jan 1
123 1 Jan 4
123 1 Jan 3
123 1 Jan 2 <-- Your data is here...
123 1 Jan 1 <-- ... and here
... ... ...
ID Created IsValid
=== ======= ========
122 Jan 4 0
122 Jan 4 1
... ... ...
123 Jan 4 0
123 Jan 4 1
123 Jan 3 0
123 Jan 3 1
123 Jan 2 0
123 Jan 2 1 <-- Your data is here...
123 Jan 1 0
123 Jan 1 1 <-- ... and here
... ... ...
如您所知,創建索引(IsValid,Created,ID)或任何其他順序將進一步分離數據。 通常,您希望設計索引,以使最常執行的查詢的數據盡可能“笨拙”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.