Tôi đã đoán rằng khi một truy vấn bao gồm TOP n, công cụ cơ sở dữ liệu sẽ chạy truy vấn bỏ qua mệnh đề TOP, và cuối cùng, chỉ thu nhỏ kết quả đó được đặt xuống n số hàng được yêu cầu. Kế hoạch thực hiện đồ họa dường như chỉ ra đây là trường hợp - TOP là bước "cuối cùng". Nhưng nó xuất hiện có nhiều hơn đang diễn ra.
Cách thức nói trên khiến tôi nghĩ rằng bạn có thể có một bức tranh tinh thần không chính xác về cách một truy vấn thực hiện. Một toán tử trong kế hoạch truy vấn không phải là một bước (trong đó tập kết quả đầy đủ của bước trước được đánh giá bởi bước tiếp theo.
SQL Server sử dụng mô hình thực thi theo đường ống , trong đó mỗi toán tử hiển thị các phương thức như init () , GetRow () và Close () . Như tên GetRow () gợi ý, một toán tử tạo một hàng tại một thời điểm theo yêu cầu (theo yêu cầu của toán tử mẹ của nó). Điều này được ghi lại trong tài liệu tham khảo Toán tử và vật lý trực tuyến của Sách , với chi tiết hơn trong bài đăng trên blog của tôi Tại sao các kế hoạch truy vấn chạy ngược . Mô hình hàng tại thời điểm này rất cần thiết trong việc hình thành một trực giác âm thanh để thực hiện truy vấn.
Câu hỏi của tôi là, làm thế nào (và tại sao) một TOPmệnh đề n ảnh hưởng đến kế hoạch thực hiện của một truy vấn?
Một số hoạt động logic như TOP, bán tham gia và FAST n gợi ý truy vấn ảnh hưởng đến cách trình tối ưu hóa truy vấn chi phí thay thế kế hoạch thực hiện. Ý tưởng cơ bản là một hình dạng kế hoạch có thể có thể trả về n hàng đầu tiên nhanh hơn một kế hoạch khác được tối ưu hóa để trả về tất cả các hàng.
Ví dụ, tham gia các vòng lặp được lập chỉ mục thường là cách nhanh nhất để trả về một số lượng nhỏ hàng, mặc dù phép băm hoặc hợp nhất với quét có thể hiệu quả hơn trên các tập lớn hơn. Cách trình tối ưu hóa truy vấn lý do về các lựa chọn này là bằng cách đặt Mục tiêu hàng tại một điểm cụ thể trong cây hoạt động logic.
Một mục tiêu hàng sửa đổi cách thay thế kế hoạch truy vấn được tính chi phí. Bản chất của nó là trình tối ưu hóa bắt đầu bằng cách tính chi phí cho mỗi toán tử vì nếu cần phải có bộ kết quả đầy đủ, đặt mục tiêu hàng tại điểm thích hợp và sau đó làm việc trở lại cây kế hoạch ước tính số lượng hàng mà nó cần kiểm tra để đáp ứng mục tiêu hàng.
Ví dụ: logic TOP(10)đặt mục tiêu hàng là 10 tại một điểm cụ thể trong cây truy vấn logic. Chi phí của các nhà khai thác dẫn đến mục tiêu hàng được sửa đổi để ước tính số lượng hàng họ cần sản xuất để đáp ứng mục tiêu hàng. Tính toán này có thể trở nên phức tạp, do đó dễ hiểu hơn tất cả điều này với một ví dụ hoạt động đầy đủ và các kế hoạch thực hiện có chú thích. Các mục tiêu hàng có thể ảnh hưởng nhiều hơn đến việc lựa chọn loại tham gia hoặc liệu tìm kiếm và tra cứu được ưa thích để quét. Thêm chi tiết về điều đó ở đây .
Như mọi khi, một kế hoạch thực hiện được lựa chọn trên cơ sở mục tiêu hàng phải tuân theo khả năng suy luận của trình tối ưu hóa và chất lượng thông tin được cung cấp cho nó. Không phải mọi kế hoạch với mục tiêu hàng sẽ tạo ra số lượng hàng cần thiết nhanh hơn trong thực tế, nhưng theo mô hình chi phí, nó sẽ.
Khi một kế hoạch mục tiêu hàng chứng tỏ không nhanh hơn, thường có các cách để sửa đổi truy vấn hoặc cung cấp thông tin tốt hơn cho trình tối ưu hóa sao cho kế hoạch được chọn tự nhiên là tốt nhất. Lựa chọn nào phù hợp trong trường hợp của bạn phụ thuộc vào chi tiết của khóa học. Tính năng mục tiêu hàng nói chung là rất hiệu quả (mặc dù có một lỗi cần chú ý khi được sử dụng trong các kế hoạch thực hiện song song).
Truy vấn và kế hoạch cụ thể của bạn có thể không phù hợp để phân tích chi tiết tại đây (bằng mọi cách cung cấp kế hoạch thực hiện thực tế nếu bạn muốn) nhưng hy vọng các ý tưởng được nêu ở đây sẽ cho phép bạn tiến bộ.
ORDER BYmệnh đề. Thêm cácTOPthay đổi trong kế hoạch loại này xảy ra, nhưng tôi quan tâm hơn về cách nó ảnh hưởng đến số lần thực hiện của chỉ số tìm kiếm so với bảng B ... (tất nhiên cả hai có thể liên quan - tôi không biết)