2010-10-07 39 views
8

Tôi hiểu rằng chỉ mục tổng hợp luôn được sử dụng từ trái sang phải (ví dụ: nếu chỉ mục ở thành phố, tiểu bang, thành phố WHERE = "Blah" hoặc WHERE City = "Blah" AND = "AA" sẽ hoạt động tốt nhưng WHERE State = "AA" sẽ không hoạt động.Chỉ mục tổng hợp so với INCLUDE Chỉ mục bao gồm trong SQL Server

Nguyên tắc tương tự này có áp dụng cho chỉ mục INCLUDE không?

Cảm ơn trước!

Đất sét

Trả lời

13

Bao gồm cột chỉ có thể được sử dụng để cung cấp cột vào phần SELECT của truy vấn. Chúng không thể được sử dụng như một phần của chỉ mục để lọc.

EDIT: Để làm rõ thêm quan điểm của tôi, hãy xem xét ví dụ sau:

tôi có thể tạo một bảng đơn giản và cư nó:

create table MyTest (
    ID int, 
    Name char(10) 
) 

insert into MyTest 
    (ID, Name) 
    select 1, 'Joe' union all 
    select 2, 'Alex' 

Bây giờ hãy xem xét những 3 chỉ số và kế hoạch thực hiện tương ứng của họ đối với một SELECT đơn giản.

select ID, Name 
    from MyTest 
    where Name = 'Joe' 

Trường hợp 1: Một chỉ số về kết quả ID chỉ trong một TABLE SCAN.

create index idx_MyTest on MyTest(ID) 

alt text

Trường hợp 2: Một chỉ số trên ID bao gồm tên. Hơi tốt hơn vì chỉ mục bao gồm truy vấn, nhưng tôi vẫn nhận được hoạt động QUÉT.

create index idx_MyTest on MyTest(ID) include (Name) 

alt text

Trường hợp 3: Một chỉ số trên bao gồm Tên ID. Đây là thứ tốt nhất. Chỉ mục được xây dựng trên cột trong mệnh đề WHERE của tôi, vì vậy tôi có một hoạt động SEEK và chỉ mục bao gồm truy vấn vì cột được bao gồm.

create index idx_MyTest on MyTest(Name) include (ID) 

alt text

+0

Cảm ơn Joe. Tôi có thể thấy nơi họ sẽ không hữu ích cho riêng họ, nhưng nếu họ không thể được sử dụng để lọc, sẽ không có nhiều điểm cho sự tồn tại của họ. – PseudoToad

+0

Tôi không quan tâm một phiếu bầu xuống nếu tôi sai, nhưng tôi không thích một cuộc bỏ phiếu ẩn danh không có lời giải thích. Bạn có thể giải thích phản đối của bạn? –

+0

-1 Tôi không đồng ý với "chúng không thể được sử dụng như một phần của chỉ mục để lọc". Bạn có thể tạo một chỉ mục cvoering, thêm một điều kiện trên một cột trong mệnh đề INCLUDE và chỉ mục sẽ vẫn được bao hàm. Downvote của tôi không phải là vô danh. –

Các vấn đề liên quan