CTE
chỉ là một bí danh cho truy vấn.
Nó có thể (hoặc không) được chạy lại mỗi khi nó được sử dụng.
Không có cách nào rõ ràng để buộc CTE
hiện thực hóa trong SQL Server
(như /*+ MATERIALIZE */
của Oracle ), và bạn phải làm những trò bẩn thỉu như thế này:
CTE
có thể cải thiện hiệu suất nếu được sử dụng trong các kế hoạch chỉ yêu cầu một lần đánh giá (như HASH JOIN
, MERGE JOIN
v.v.).
Trong các trường hợp này, bảng băm sẽ được tạo ngay từ CTE
, trong khi sử dụng bảng tạm thời sẽ yêu cầu đánh giá CTE
, kéo kết quả vào bảng tạm thời và đọc lại bảng tạm thời.