11

CTE có sử dụng bất kỳ không gian nào trong tempdb hay không sử dụng bộ nhớ độc quyền?CTE có sử dụng bất kỳ khoảng trống nào trong tempdb không?

Tôi đã gắn thẻ câu hỏi với cả hai mssql 2005 và 2008 khi tôi sử dụng cả hai.

+0

Truy vấn chắc chắn được ghi chú trong . Xem phần dưới đây về "Không gian theo yêu cầu của truy vấn" cũng. –

Trả lời

11

Tôi sẽ cố gắng không sao chép/dán MSDN

Nó không quan trọng.

CTE không phụ thuộc vào việc thực thi truy vấn: nó chỉ là cấu trúc ngôn ngữ. Hãy suy nghĩ về nó như là bảng bắt nguồn gọn gàng hoặc truy vấn phụ.

Đ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ành cho khả năng đọc. Nếu bạn sử dụng CTE hai lần hoặc nhiều hơn, thì nó là phòng thủ: bạn không muốn mắc lỗi và có bảng dẫn xuất khác nhau mỗi lần sử dụng.

Trường hợp CTE được sử dụng hai lần trở lên thì mã đó sẽ được thực hiện hai lần trở lên. Nó sẽ không được thực thi một lần và được lưu trữ trong tempdb.

Tóm tắt: có thể có hoặc không, giống như nếu mã được nội tuyến.

Lưu ý: CTE đệ quy đơn giản là một bảng dẫn xuất bên trong một bảng có nguồn gốc bên trong một bảng có nguồn gốc bên trong một bảng dẫn xuất bên trong một der ... tương tự như vậy được áp dụng.

Bạn có thể thấy điều này trong Tony Rogerson's article. Việc sử dụng tempdb sẽ xảy ra nếu mã hóa nội tuyến. Ông cũng lưu ý rằng việc sử dụng bảng tạm thời có thể tốt hơn do mở rộng "vĩ mô", tôi đã giải thích ở trên

FYI: áp dụng tương tự cho lượt xem. Chỉ các macro.

+0

+1 Không có câu trả lời sao chép/dán. –

7

Một biểu thức bảng chung có thể được coi như là kết quả tạm thời thiết lập được định nghĩa trong phạm vi thực hiện của một đơn SELECT, INSERT, UPDATE, DELETE, hoặc câu lệnh CREATE VIEW. Khi kế hoạch truy vấn cho một truy vấn biểu thức bảng phổ biến sử dụng toán tử ống chỉ để lưu kết quả truy vấn trung gian, Cơ sở dữ liệu tạo một bảng làm việc trong tempdb để hỗ trợ thao tác này.

source

4

Từ MSDN: http://msdn.microsoft.com/en-us/library/ms345368.aspx

Một biểu thức bảng chung có thể được coi như là một tập kết quả tạm thời được xác định trong phạm vi thực hiện của một SELECT đơn, INSERT, UPDATE, DELETE, hoặc CREATE VIEW statement. Khi kế hoạch truy vấn cho truy vấn biểu thức bảng chung sử dụng toán tử ống chỉ để lưu kết quả truy vấn trung gian, Cơ sở dữ liệu tạo ra một bảng làm việc trong tempdb để hỗ trợ thao tác này.

Các vấn đề liên quan