質問

私は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内何か、そして必要なすべての属性によって必要とされていない場合にも、インデックスであることが起こると、そのクエリはインデックスのみを読むことができる、としませ触れますテーブルには、全く...でも彼は、クエリのクエリ実行プランを見て、インデックスに存在しない列が...あなたがこれを見ることができます参照を表示思いました。

他のヒント

あなたはManagement Studioで表示されたクエリの実行計画を持っている場合は、

は、実行計画内のノード上にカーソルを移動し、マウスを使用することができます。

あなたが置くと、

、大ツールチップが表示されます。これらの分野の多くのインスタンスが読み込まれる方法を示して、そのノードが取得したフィールドの「出力リスト」、および「行の推定数」フィールドを含んでいます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top