23

これら2つのインデックスの違いを本当に理解したことがありません。誰かが違いを説明できますか(パフォーマンスに関して、インデックス構造がdbでどのように見えるか、ストレージに関してなど)?

含まれる索引

CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
ON Person.Address (PostalCode) 
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID); 

「ノーマル」インデックス

CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
ON Person.Address (PostalCode, AddressLine1, AddressLine2, City, StateProvinceID);
4

3 に答える 3

6

最初のインデックスでは、キー列Index pageのみであり、ルックアップを避けるためにリーフ ノードの一部です。PostalCodeAddressLine1, AddressLine2, City, StateProvinceIDkey/RID

PostalCodeテーブルが常にフィルタリングされ、この列のいずれかがフィルタリングAddressLine1, AddressLine2, City, StateProvinceIDの一部でselectあり、フィルタリングではない場合、最初のインデックスを優先します

select AddressLine1, AddressLine2, City, StateProvinceID
from Person.Address 
Where PostalCode=  

2 番目のインデックスには、Index page5 つのキー列がありますPostalCode, AddressLine1, AddressLine2, City, StateProvinceID

次のようなデータをフィルタリングする可能性がある場合は、2番目のインデックスを好みます

Where PostalCode = And AddressLine1 = 

また

Where PostalCode = And AddressLine2 = 

また

Where PostalCode = And AddressLine1  = and AddressLine2 = 

等々..

いずれにしても、インデックスを利用するには、インデックスの最初の列をフィルタリングの一部にする必要があります

于 2017-01-22T13:29:49.823 に答える