TÙY CHỌN NHANH CHÓNG trong câu lệnh CHỌN làm gì?


29

Tôi đã thực hiện một số nghiên cứu về OPTION (FAST XXX)gợi ý truy vấn trong SELECTcâu lệnh và vẫn còn nhầm lẫn về nó. Theo MSDN:

Chỉ định rằng truy vấn được tối ưu hóa để truy xuất nhanh các số đầu tiên. Đây là một số nguyên không âm. Sau khi số_bảng đầu tiên được trả về, truy vấn tiếp tục thực hiện và tạo tập kết quả đầy đủ của nó.

Đối với tôi điều đó không có nhiều ý nghĩa nhưng về cơ bản, truy vấn có thể nhận được các hàng XXX đầu tiên thực sự nhanh sau đó phần còn lại ở tốc độ bình thường?

Truy vấn Microsoft Dynamics khiến tôi suy nghĩ về điều này là:

select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like  '%'
order by project OPTION(FAST 500)

Bất cứ ai cũng có thể giải thích chính xác những gì gợi ý truy vấn này đang làm và đó là lợi thế của việc không sử dụng nó?

Câu trả lời:


24

A FAST Nsẽ báo cho SQL Server tạo một kế hoạch thực hiện với việc nhanh chóng trả về số lượng hàng được xác định là N.

Lưu ý rằng các ước tính sẽ theo như Nbạn đang nói với máy chủ sql để lấy Nhàng càng nhanh càng tốt.

ví dụ: chạy bên dưới truy vấn với fast 500:

-- total rows : 19972
 SELECT [BusinessEntityID]
      ,[TotalPurchaseYTD]
      ,[DateFirstPurchase]
      ,[BirthDate]
      ,[MaritalStatus]
      ,[YearlyIncome]
      ,[Gender]
      ,[TotalChildren]
      ,[NumberChildrenAtHome]
      ,[Education]
      ,[Occupation]
      ,[HomeOwnerFlag]
      ,[NumberCarsOwned]
  FROM [AdventureWorks2012].[Sales].[vPersonDemographics]
  order by BusinessEntityID
  option (fast 500)

Est vs hàng thực tế với option (fast 500)

nhập mô tả hình ảnh ở đây

Est vs hàng thực tế không có option (fast 500)

nhập mô tả hình ảnh ở đây

Một trường hợp sử dụng sẽ là khi một ứng dụng đang thực hiện lưu trữ (tải một lượng lớn dữ liệu trong nền) và muốn hiển thị cho người dùng một lát dữ liệu càng nhanh càng tốt.

Một trường hợp sử dụng thú vị khác là ở vùng đất SSIS mà Rob Farley mô tả bằng cách sử dụng FAST Nlàm chất xúc tác tăng tốc độ truy xuất dữ liệu.

Bằng cách thêm gợi ý này, nó có cảm giác như một cây đũa thần đã được vẫy qua truy vấn, để làm cho nó chạy nhanh hơn nhiều lần.

Xem câu trả lời của Remus Rusanu là tốt .


11

Khi bạn sử dụng gợi ý truy vấn này TÙY CHỌN (FAST n), trình tối ưu hóa sẽ chọn một kế hoạch thực hiện có thể trả về số lượng bản ghi đó theo cách nhanh nhất có thể. Thông thường, trình tối ưu hóa cố gắng quyết định một con đường có thể trả về kết quả hoàn chỉnh một cách hiệu quả. Vì vậy, nếu bạn muốn một tập hợp các hàng quay trở lại nhanh chóng, bạn có thể sử dụng điều này để truy xuất chúng, nhưng trong hầu hết các trường hợp, sử dụng gợi ý này sẽ khiến tập kết quả hoàn chỉnh quay lại chậm hơn so với việc trình tối ưu hóa sử dụng kế hoạch để thực hiện vì thế.

Chỉ cần giải thích chi tiết về trường hợp sử dụng: bạn có thể có hai bảng khá lớn mà bạn cần nối với nhau, nhưng bạn biết chỉ có một bộ dữ liệu nhỏ hơn mà bạn cần để làm việc với một trong số chúng. Trong trường hợp này, sử dụng FAST trên một bảng lớn hơn mà không phải tạo các chỉ mục / chi phí bổ sung có thể giúp thay vì cài đặt SQL tạo một bảng băm khổng lồ trong nền.


2

Tôi đã vấp phải câu hỏi tương tự một vài năm trước đây khi điều tra các vấn đề về hiệu suất trong Dynamics AX. Theo giải thích của Microsoft, tôi có thể thấy một kế hoạch thực hiện khác được kích hoạt bởi gợi ý và điều này tương ứng với các câu trả lời khác được đưa ra ở đây.

Với gợi ý, SQL Server cố gắng tìm một kế hoạch thực hiện cho phép phân loại kết quả, ví dụ như chúng đi ra khỏi một vòng lặp lồng nhau, thay vì một kế hoạch thực hiện yêu cầu tất cả các bản ghi phải được đọc (và có khả năng được sắp xếp) trước đó là đầu ra.

Vấn đề duy nhất trong trường hợp của tôi là máy chủ SQL luôn mất (nhiều) phút để trả về kết quả khi sử dụng gợi ý, trong khi truy vấn trả về kết quả (toàn bộ kết quả) trong vài giây mà không có gợi ý ... không hoàn toàn là gì đã được mong đợi Tôi rất thận trọng sử dụng gợi ý này và không sử dụng một cách có hệ thống trên tất cả các hình thức như trong môi trường Động lực học của chúng tôi (tốt, không còn nữa).

Vì vậy, để trả lời OP: giống như nhiều gợi ý, không nhất thiết phải giúp cải thiện truy vấn như được yêu cầu (vì vậy ... kiểm tra, kiểm tra, kiểm tra!)

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.