Tôi sẽ cố gắng không sao chép / dán MSDN
Không thành vấn đề.
CTE độc lập với việc thực thi truy vấn:nó chỉ là một cấu trúc ngôn ngữ. Hãy coi nó như một bảng dẫn xuất gọn gàng hoặc truy vấn con.
Điều này có nghĩa là ngoại trừ CTE đệ quy (xem sau), tất cả CTE có thể được mã hóa nội tuyến. Nếu bạn sử dụng mã CTE một lần, mã này là để dễ đọc . Nếu bạn sử dụng CTE hai lần trở lên, thì đó là biện pháp phòng thủ:bạn không muốn mắc lỗi và đặt bảng dẫn xuất mỗi lần sử dụng.
Khi một CTE được sử dụng hai lần hoặc nhiều hơn, thì mã đó sẽ được thực thi hai lần hoặc nhiều hơn. Nó sẽ không được thực thi một lần và được lưu vào bộ nhớ cache trong tempdb.
Tóm tắt:nó có thể có hoặc không, giống như nếu mã là nội tuyến.
Lưu ý:CTE đệ quy chỉ đơn giản là một bảng dẫn xuất bên trong bảng dẫn xuất bên trong bảng dẫn xuất bên trong bảng dẫn xuất bên trong một der ... vì vậy cũng áp dụng tương tự.
Bạn có thể thấy điều này trong Bài viết của Tony Rogerson . Việc sử dụng tempdb dù sao cũng sẽ xảy ra nếu được mã hóa nội tuyến. Anh ấy cũng lưu ý rằng sử dụng bảng tạm thời có thể tốt hơn do mở rộng "macro" mà tôi đã giải thích ở trên
FYI:áp dụng tương tự cho các lượt xem. Chỉ macro.