Câu trả lời, như thường lệ (ổn thôi, hầu hết thời gian), nằm trong kế hoạch thực hiện.
Có một số toán tử nhất định yêu cầu tất cả các hàng đến chúng trước khi chúng có thể bắt đầu xử lý các hàng đó và chuyển chúng xuống dưới, ví dụ:
- Hash Tham gia (xây dựng bảng băm)
- Trận đấu băm
- Sắp xếp (Ngoại trừ Hash Flow riêng biệt)
Chúng được gọi là chặn hoặc dừng và đi các nhà khai thác vì điều này và chúng thường được chọn khi trình tối ưu hóa nghĩ rằng nó sẽ phải xử lý toàn bộ nhiều dữ liệu để tìm dữ liệu của bạn.
Có các toán tử khác có thể bắt đầu truyền phát hoặc chuyển bất kỳ hàng nào được tìm thấy ngay lập tức
- Vòng lồng nhau
- Chỉ số hỗ trợ hợp nhất
- Tập hợp luồng
Khi các truy vấn bắt đầu trả về dữ liệu ngay lập tức, nhưng không kết thúc ngay lập tức, đó thường là dấu hiệu cho thấy trình tối ưu hóa đã chọn một kế hoạch để xác định vị trí và trả lại một số hàng một cách nhanh chóng bằng cách sử dụng các toán tử có chi phí khởi động thấp hơn.
Điều này có thể xảy ra do các mục tiêu hàng được giới thiệu bởi bạn hoặc bởi trình tối ưu hóa.
Nó cũng có thể xảy ra nếu một kế hoạch xấu được chọn vì một số lý do (thiếu SARGability, đánh hơi thông số, không đủ số liệu thống kê, v.v.), nhưng điều đó cần phải đào sâu hơn để tìm ra.
Để biết thêm thông tin, hãy xem blog của Rob Farley tại đây
Và loạt bài của Paul White về các mục tiêu hàng ở đây , đây , đây và đây .
Cũng cần lưu ý rằng, nếu bạn đang nói về SSMS, các hàng chỉ xuất hiện khi toàn bộ bộ đệm đã được lấp đầy, không chỉ là willy-nilly.