Sau một chút tìm kiếm, tôi không thể tìm thấy một nguồn cụ thể và thỏa mãn từ tài liệu của Microsoft để trả lời câu hỏi này. Có rất nhiều mô tả và định nghĩa của bên thứ ba về adhoc / ad-hoc / ad hoc ngoài kia, nhưng đối với tính đặc thù của câu hỏi này, tôi nghĩ rằng một nguồn gần với nguồn là lý tưởng.
Di chuyển các định nghĩa chung (nhưng vẫn chính xác) như bài đăng SO này (cảm ơn SqlWorldWide), nếu chúng ta xem tài liệu nói gì về chủ đề này, nó đồng ý với những gì bạn đã đề cập về định nghĩa dựa trên số lần thực hiện , Tôi nghĩ đến mức chúng ta có thể coi đó là sự thật.
Bài viết về tối ưu hóa cho quy trình làm việc ad hoc nói,
Khi tùy chọn này được đặt thành 1, Cơ sở dữ liệu sẽ lưu trữ một sơ đồ được biên dịch nhỏ trong bộ đệm của gói khi một lô được biên dịch lần đầu tiên, thay vì gói được biên dịch đầy đủ. Điều này giúp giảm áp lực bộ nhớ bằng cách không cho phép bộ đệm kế hoạch được lấp đầy với các gói đã biên dịch không được sử dụng lại. Sơ đồ kế hoạch đã biên dịch cho phép Công cụ cơ sở dữ liệu nhận ra rằng lô ad hoc này đã được biên dịch trước đó nhưng chỉ lưu trữ sơ đồ kế hoạch đã biên dịch, do đó, khi lô này được gọi (biên dịch hoặc thực thi) một lần nữa, Công cụ cơ sở dữ liệu sẽ biên dịch lô ... và thêm kế hoạch được biên dịch đầy đủ vào bộ đệm của kế hoạch.
Vì vậy, nó sẽ xuất hiện tùy chọn cấu hình máy chủ truy vấn ad hoc cũng sử dụng định nghĩa của một thực thi duy nhất như định nghĩa của ad hoc. Nếu truy vấn tiếp tục được thực thi và tạo cùng một kế hoạch, nó sẽ không còn được xử lý như vậy nữa.
Bài viết về Thực tiễn Tốt nhất cho Cửa hàng Truy vấn cũng phù hợp với điều này,
So sánh số lượng giá trị query_hash riêng biệt với tổng số mục trong sys.query_store_query. Nếu tỷ lệ gần bằng 1, khối lượng công việc đặc biệt của bạn sẽ tạo ra các truy vấn khác nhau.
Tất nhiên, điều này là dành cho các truy vấn chưa được sử dụng làm thủ tục được lưu trữ, tham số hóa, v.v. bởi vì chúng có thể được nhận ra và xử lý thích hợp ngay lập tức.
Vì vậy, dựa trên tất cả những điều này, chúng ta có thể nói rằng một truy vấn được coi là ad hoc nếu:
- Nó không được tham số hóa
- Nó không được lưu trữ theo chương trình trong cơ sở dữ liệu (lưu trữ Proc, chức năng, kích hoạt, v.v.)
- Truy vấn tương tự chỉ được thực hiện một lần HOẶC Truy vấn tương tự được thực hiện nhiều lần nhưng tạo ra một kế hoạch truy vấn khác nhau cho mỗi lần thực hiện tiếp theo.