2009-06-30 24 views
5

Truy vấn chọn có thể sử dụng các chỉ mục khác nhau nếu thay đổi giá trị của điều kiện ở đâu không?Truy vấn giống nhau sử dụng các chỉ mục khác nhau?

Hai truy vấn sau đây sử dụng các chỉ số khác nhau và sự khác biệt duy nhất là giá trị của điều kiện và typeenvoi = 'KHẨU' hoặc và typeenvoi = 'MAIL'

select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail 
      from v_envoiautomate 
      where etat=0 and typeenvoi='EXPORT' 
      and nbessais<1 


select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail 
      from v_envoiautomate 
      where etat=0 and typeenvoi='MAIL' 
      and nbessais<1 

bất cứ ai có thể cho tôi một lời giải thích?

Trả lời

8

Chi tiết về chỉ mục được lưu trữ dưới dạng thống kê trong bộ dữ liệu loại biểu đồ trong SQL Server.

Mỗi chỉ số được chunked thành dãy, mỗi dãy có chứa một bản tóm tắt của các giá trị quan trọng trong phạm vi đó, mọi thứ như:

  • phạm vi giá trị cao số
  • các giá trị trong phạm vi
  • số các giá trị khác biệt trong phạm vi (số lượng thẻ)
  • số giá trị bằng với giá trị Cao

... an d như vậy.

Bạn có thể xem số liệu thống kê trên chỉ số cho trước với:

DBCC SHOW_STATISTICS(<tablename>, <indexname>) 

Mỗi chỉ số có một vài đặc điểm như mật độ, và cuối cùng chọn lọc, mà nói optimizer truy vấn cách độc đáo mỗi giá trị trong một chỉ số có khả năng là, và làm thế nào hiệu quả chỉ số này là lúc nhanh chóng xác định vị trí hồ sơ.

Khi truy vấn của bạn có ba cột trong mệnh đề where, có khả năng là bất kỳ cột nào trong số này có thể có chỉ mục hữu ích cho trình tối ưu hóa. Nó cũng có khả năng là chỉ số khóa chính sẽ được xem xét, trong trường hợp chọn lọc của các chỉ số khác không đủ cao.

Cuối cùng, nó tóm tắt để người tối ưu thực hiện cuộc gọi phán quyết nhanh về số lần đọc trang sẽ cần thiết để đọc từng chỉ mục không được nhóm của bạn + tra cứu dấu trang, so sánh với các giá trị khác, so với thực hiện quét bảng .

Thống kê mà các phán đoán này dựa trên có thể thay đổi rất nhiều; SQL Server, theo mặc định, chỉ lấy mẫu một tỷ lệ phần trăm nhỏ của bất kỳ hàng nào của bảng quan trọng, do đó, khả năng chọn lọc của chỉ mục đó có thể không đại diện cho toàn bộ. Điều này đặc biệt có vấn đề khi bạn có các khóa không phải là duy nhất trong chỉ mục.

Trong trường hợp cụ thể này, tôi đoán chỉ số typeenvoi của bạn là rất không độc đáo.Điều này là như vậy, các số liệu thống kê thu thập có thể chỉ ra cho trình tối ưu hóa rằng một trong các giá trị này hiếm hơn giá trị kia và khả năng chỉ số đó được chọn sẽ tăng lên.

2

Có lẽ phải làm với "bản thân", tôi tin rằng từ đó là của các giá trị trong bảng. Nếu có nhiều hàng hơn khớp với mệnh đề đó, SQL Server có thể quyết định rằng một truy vấn sẽ hiệu quả hơn bằng cách sử dụng một chỉ mục cho một cột khác. Đây là trường hợp cực đoan, nhưng nếu có một hàng khớp với 'MAIL', nó có khả năng sẽ sử dụng chỉ mục đó. Nếu mỗi hàng khác trong bảng là 'XUẤT KHẨU', nhưng chỉ một nửa trong số các hàng 'XUẤT KHẨU' có một số etat của 0, thì có thể nó sẽ sử dụng chỉ mục trên cột đó.

+1

@Lazy Bobo: Bạn đúng trong lý do của bạn tuy nhiên tôi tin rằng "từ" bạn đang tìm kiếm là "chọn lọc" tức là tính chọn lọc của cột dựa trên phân phối các giá trị dữ liệu –

4

Trình tối ưu hóa truy vấn trong SQL Server (như trong hầu hết các nền tảng DBMS hiện đại) sử dụng phương pháp được gọi là 'tối ưu hóa dựa trên chi phí'. Để làm điều này, nó sử dụng số liệu thống kê về các bảng trong cơ sở dữ liệu để ước tính số lượng I/O cần thiết. Trình tối ưu hóa sẽ xem xét một số kế hoạch truy vấn tương đương ngữ nghĩa mà nó tạo ra bằng cách chuyển đổi một kế hoạch truy vấn cơ bản được tạo ra bằng cách phân tích cú pháp câu lệnh.

Mỗi kế hoạch được đánh giá về chi phí theo phương pháp phỏng đoán dựa trên thống kê được duy trì về các bảng. Số liệu thống kê đến trong hương vị khác nhau:

  • Bảng và hàng index đếm

  • phân phối biểu đồ của các giá trị trong cột cá nhân.

Nếu ocurrence của 'MAIL' so với 'EXPORT' trong biểu đồ phân phối khác nhau đáng kể, trình tối ưu hóa truy vấn có thể đưa ra các gói tối ưu khác nhau. Đây có lẽ là những gì đã xảy ra.

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