私はMSSQLServerを使用しています。
データベーススキーマを定義するとき、たとえば次のように多くのフィールドを含む(マテリアライズド化されていない)ビューを定義します(「トピック」はテーブルの名前であり、ビューはトピックテーブルの自己結合です)。 :
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)これに対する答えを自分で確認するにはどうすればよいですか?テスト(ストップウォッチで経過時間を測定する)が唯一の方法ですか、それとも理論に基づいて答えを得ることができますか?SQLExpressでMicrosoftSQLServer2008用の「MicrosoftServerSQLManagementStudio」を使用しています。このクエリの「推定実行プラン」を取得する方法はわかりますが(解釈方法は学習していません)、これは、データが参照されていないフィールドから取得されているかどうかではなく、発生しているインデックスとループのみを示しています。