Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các CTE có sử dụng bất kỳ khoảng trống nào trong tempdb không?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra lược đồ máy chủ SQL?

  2. Làm thế nào để gán một kết quả thực thi cho một biến sql?

  3. Cách thay đổi định dạng ngày hiện tại trong SQL Server (T-SQL)

  4. SQL Server - sau khi chèn trình kích hoạt - cập nhật một cột khác trong cùng một bảng

  5. Cách chuyển đổi cột văn bản thành ngày giờ trong SQL