Thứ tự của các trường trong truy vấn SELECT có quan trọng khi sử dụng lập chỉ mục tổng hợp không?


7

Tôi hiểu rằng thứ tự của các cột trong chỉ mục rất quan trọng; tuy nhiên, còn thứ tự các cột trong các truy vấn CHỌN tiếp theo sử dụng chỉ mục đó thì sao?

Ví dụ: nếu tôi có chỉ mục nhiều cột trên [:col_1, :col_2, :col_3], câu lệnh CHỌN của tôi có cần trông giống như "SELECT * FROM my_table WHERE col_1 = (?), col_2 = (?), col_3 = (?)"để truy vấn được tối ưu hóa không? Hoặc tôi có thể chỉ định các thông số theo bất kỳ thứ tự nào và trình tối ưu hóa truy vấn sẽ xử lý nó?

Tôi đã đọc một vài câu trả lời tương tự , nhưng dường như không có câu trả lời dứt khoát nào chỉ vào tài liệu và trả lời liên quan đến chỉ mục. Một số câu trả lời cho biết "không quan trọng" hoặc "hiệu quả là không đáng kể".

Tôi đang làm việc với RoR / ActiveRecord trên PostgreSQL, nhưng câu hỏi thực sự dành cho bất kỳ DB / quan hệ DB nào.

Câu trả lời:


11

Không, bạn có thể chỉ định 'params' (các phần của wheremệnh đề) theo bất kỳ thứ tự nào và trình tối ưu hóa truy vấn sẽ xử lý nó. Trình tối ưu hóa sẽ thực hiện lọc theo thứ tự mà nó ước tính là hiệu quả nhất, nhưng lưu ý rằng điều này phức tạp hơn so với việc chỉ chọn thứ tự để lọc: lọc có thể được thực hiện trước hoặc sau khi tham gia.

Bạn không thể chứng minh chính xác điều này, nhưng bạn có thể chứng minh nó đúng với một truy vấn cụ thể bằng cách thử nghiệm và xem liệu kế hoạch có thay đổi hay không. Thậm chí có thể đúng là có những trường hợp cạnh mà trật tự vấn đề, nhưng lời khuyên của tôi là bỏ qua khả năng và cho rằng nó không bao giờ xảy ra vì nếu không bạn sẽ tốn rất nhiều nỗ lực để thử các hoán vị khác nhau. Tốt hơn nhiều để tập trung vào loại điều chỉnh mà bạn biết có thể trả cổ tức (ví dụ: lập chỉ mục chính xác).


Ah, không phải là một câu trả lời "dứt khoát", một lần nữa ! Thật thất vọng. Tôi sợ chúng ta chưa thông qua điều này và phải mong đợi nhiều câu hỏi sắp tới. Dù sao đi nữa, tôi thực sự đánh giá cao những câu trả lời "không xác định" như vậy có xu hướng xác nhận lẫn nhau. Cảm ơn tôi và +1!
Andriy M
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.