Thứ tự cột chỉ mục không bao gồm


7

Tôi có một chỉ mục không bao gồm (được gọi NCIDX1) trên col1, col2một bảng. Tôi bao gồm col3, col4, col5, col6như các cột được bao gồm trong thứ tự này.

Nếu tôi chạy truy vấn sau:

select 
     col1,col2 
from 
     tbl1
where 
     col3 = something
and
     col4 = something
and
     col5 = something

Có khác gì so với chạy không:

select 
     col3,col2 ,col4
from 
     tbl1
where 
     col1 = something
and
     col5 = something

?

Điều tôi đang cố gắng nói là, khi chúng ta tạo ra một chỉ số bao phủ như trên và chúng ta thay đổi thứ tự mà chúng ta đang truy cập dữ liệu, liệu nó có còn tận dụng được chỉ số bao phủ này không?

Ngoài ra, thứ tự của các cột bằng (giữa chúng) và các cột không bằng (giữa chúng) ... có vấn đề gì không? Thích where equalitycol2='' and equalitycol1=''.

Câu trả lời:


8

Nói chung, một chỉ mục nên được bật

(equalitycol1, equalitycol2, ..., nonequalitycol1, , nonequalitycol2, ...)
INCLUDE
(outputonlycol1, outputonlycol2, ...)

Đơn giản là (bỏ qua phạm vi) điều này được chia thành

  • đẳng thức : WHERE equalitycol = something. Chọn lọc đầu tiên. SARGable. Tìm kiếm.
  • nonequalitycol : WHERE nonequalitycol <> something. Bộ lọc dư
  • đầu ra : SELECT outputonlycol. Không lọc hoặc đặt hàng

ORDER BYGROUP BYcác cột sẽ là các cột bằng hoặc không bằng nhau.

Trong trường hợp này...

Truy vấn 1 hoàn toàn không khớp với chỉ mục, vì vậy rất có thể sẽ không sử dụng chỉ mục. Tuy nhiên, trình tối ưu hóa có thể quyết định sử dụng chỉ mục rẻ hơn sau đó sử dụng quyền truy cập bảng khác như quét bảng hoặc tra cứu RID / bookmark.

Đối với truy vấn 2, trình tối ưu hóa có thể quyết định sử dụng chỉ mục vì col1sẽ là một kết quả khớp bằng. Và sau đó sử dụng các loại chưa được sắp xếp col5từ INCLUDE. YMMV, nhưng có cơ hội cao hơn.

Đối với WHEREthứ tự mệnh đề, không: trình tối ưu hóa thực hiện nó. Hai chỉ số (col1, col2)(col2, col1)khác nhau mặc dù. Lưu ý (col1, col2)sẽ được bao gồm (col1, col2, col3, col4)mặc dù vậy đầu tiên là không cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.