簡體   English   中英

SQL Server表索引列順序

[英]SQL Server table index columns order

如果我以不同順序使用列,則為更多列創建表索引時會有什么區別?

ID, isValid, CreatedID, 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, CreatedID, Created, isValid索引之間到底有什么區別?

如果您始終在 WHERE子句中使用 所有三列,則沒有區別。
正如馬丁·史密斯Martin Smith)在其評論中所指出的那樣-由於條件不是相等檢查,因此索引各列的順序確實很重要

但是:只有使用了最左邊的n列(此處為1到3之間的n),才能使用索引。

因此,如果您的查詢可能僅使用IDisValid進行查詢,則可以使用第一個索引-但肯定不會使用第二個索引。

如果你有使用的查詢IDCreated作為他們的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM