Trong khi trong ví dụ đơn giản của bạn, mọi thứ sẽ giống nhau, một số thận trọng là cần thiết khi sử dụng các khung nhìn lồng nhau.
Tôi đã làm việc trên một hệ thống mà các truy vấn hết thời gian chờ sau 30 giây được xây dựng dựa trên khoảng 6 cấp độ xem lồng nhau và quản lý để tăng tốc những cấp độ này lên khoảng 100 bằng cách viết lại các truy vấn dựa trên các bảng cơ sở.
Dưới đây là một ví dụ đơn giản về loại vấn đề có thể phát sinh.
CREATE VIEW MaxTypes
AS
SELECT
[number],
MAX(type) AS MaxType
FROM [master].[dbo].[spt_values]
GROUP BY [number]
GO
CREATE VIEW MinTypes
AS
SELECT
[number],
MIN(type) AS MinType
FROM [master].[dbo].[spt_values]
GROUP BY [number]
GO
SET STATISTICS IO ON
SELECT MaxTypes.number, MinTypes.MinType, MaxTypes.MaxType
FROM MinTypes INNER JOIN
MaxTypes ON MinTypes.number = MaxTypes.number
ORDER BY MaxTypes.number
/*
Gives
Table 'spt_values'. Scan count 2, logical reads 16, physical reads 0,
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
*/
GO
SELECT
[number],
MAX(type) AS MaxType,
MIN(type) AS MinType
FROM [master].[dbo].[spt_values]
GROUP BY [number]
ORDER BY [number]
/*
Gives
Table 'spt_values'. Scan count 1, logical reads 8, physical reads 0,
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
*/