SQLビューで使用されていないフィールドのパフォーマンス
-
29-08-2019 - |
質問
私はMS SQL Serverを使用しています。
Iは、データベーススキーマを定義する場合、以下のように「トピック」テーブルの名前であり、そしてビューがオン自己結合であるIは、(例えば、多くのフィールドを含む(非実体化)ビューを定義しますトピックテーブル):
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)どのように私はこの答えを自分で確認することができますか? (ストップウォッチでellapsed時間を測定する)唯一の方法をテストし、またはそれは理論に基づいて回答を得ることが可能ですか?私は、SQL Expressでは、Microsoft SQL Server 2008の "MicrosoftサーバーSQL Management Studioを" 使用しています。私は、データが参照されていないフィールドから取得されていないかどうか、入手する方法を見て(しかし、解釈する方法を学んでいない)、このクエリの「推定実行計画」が、これはインデックスとループが起こっているものだけを示しています。
解決
クエリオプティマイザを使用すると、単一のSQLクエリへのビューから「選択」するために構築したSQLを使用してビューを定義するSQLを組み合わせることにより、クエリプランを作成します。この合わせ、最適化されたSQLで、任意の特定の属性(列)が必要でない場合、それは使用されない、最終選択はそれを必要としない場合、..具体的には、ワイヤを介して送信されることはありません。それは任意のWhere句、またはORDER BYまたは最適化されたSQL内何か、そして必要なすべての属性によって必要とされていない場合にも、インデックスであることが起こると、そのクエリはインデックスのみを読むことができる、としませ触れますテーブルには、全く...でも彼は、クエリのクエリ実行プランを見て、インデックスに存在しない列が...あなたがこれを見ることができます参照を表示思いました。
他のヒント
は、実行計画内のノード上にカーソルを移動し、マウスを使用することができます。
あなたが置くと、、大ツールチップが表示されます。これらの分野の多くのインスタンスが読み込まれる方法を示して、そのノードが取得したフィールドの「出力リスト」、および「行の推定数」フィールドを含んでいます。