我正在使用 MS SQL Server。
当我定义数据库模式时,我定义了一个(非物化)视图,其中包括许多字段,例如如下(其中“主题”是表的名称,视图是主题表上的自联接) :
CREATE VIEW View_Topic_Ancestor AS
SELECT
Subordinate.Id AS Subordinate_Id,
Subordinate.Folder_Id AS Subordinate_Folder_Id,
Subordinate.topicTitle AS Subordinate_topicTitle,
Subordinate.topicXhtml AS Subordinate_topicXhtml,
Subordinate.crossLinked AS Subordinate_crossLinked,
Superior.Id AS Superior_Id,
Superior.topicTitle AS Superior_topicTitle,
Superior.topicXhtml AS Superior_topicXhtml,
Superior.crossLinked AS Superior_crossLinked
FROM Topic AS Subordinate LEFT OUTER JOIN Topic AS Superior
ON Superior.Folder_Id = Subordinate.Folder_Id
AND
Superior.LeftValue = (SELECT MAX(Ancestor.LeftValue)
FROM Topic AS Ancestor
WHERE Subordinate.LeftValue > Ancestor.LeftValue
AND Subordinate.LeftValue < Ancestor.RightValue
AND Subordinate.Folder_Id = Ancestor.Folder_Id)
稍后(在运行时)我在 select 语句中使用此视图,如下所示:
SELECT
T.Id AS Shared_Id,
V.Superior_Id,
V.Superior_topicTitle,
V.Subordinate_Id,
V.Subordinate_Folder_Id,
V.Subordinate_topicXhtml
FROM Topic AS T, View_Topic_Ancestor AS V
WHERE Folder_Id='e2eb2b68-738d-49ad-9787-a1e655b7973f'
AND T.crossLinked = V.Subordinate_Id
此 SELECT 语句不引用(不选择)视图中的许多字段:例如,它选择了 Subordinate_topicXhtml 字段,但不选择 Superior_topicXhtml 字段。
我的问题是:
1) 在视图中定义但在视图的运行时选择中未引用的字段对性能有很大影响吗?假设您愿意,Superior_topicXhtml 字段包含大量数据(是一个很长的字符串)。
2)我如何自己验证这个答案?测试(用秒表测量经过的时间)是唯一的方法,还是有可能获得基于理论的答案?我正在使用带有 SQL Express 的 Microsoft SQL Server 2008 的“Microsoft Server SQL Management Studio”。我了解如何获取(但尚未学会如何解释)此查询的“估计执行计划”,但这仅显示正在发生的索引和循环,而不是是否从未引用的字段中检索数据。