Trên một số bảng thử nghiệm, kế hoạch ban đầu của bạn trông như sau.
Nó chỉ tính toán kết quả một lần và lưu vào bộ nhớ cache trong một sppol sau đó phát lại kết quả đó. Bạn có thể thử cách sau để SQL Server thấy truy vấn con có tương quan và cần đánh giá lại cho từng hàng bên ngoài.
UPDATE table1
SET table2Id = (SELECT TOP 1 table2Id
FROM table2
ORDER BY Newid(),
table1.table1Id)
Đối với tôi, kế hoạch này không có ống chỉ.
Điều quan trọng là phải tương quan trên một trường duy nhất từ table1
tuy nhiên, để ngay cả khi một ống được thêm vào, nó phải luôn được bật lại thay vì cuộn lại (phát lại kết quả cuối cùng) vì giá trị tương quan sẽ khác nhau đối với mỗi hàng.
Nếu các bảng lớn, điều này sẽ chậm vì công việc yêu cầu là sản phẩm của hai hàng của bảng (cho mỗi hàng trong table1
nó cần quét toàn bộ table2
)