sql >> データベース >  >> RDS >> Sqlserver

SQL Server SHOWPLAN_ALL

    SQL Serverでは、SET SHOWPLAN_ALLを使用できます。 T-SQLステートメントの実行方法に関する詳細情報、およびステートメントのリソース要件の見積もりを返すステートメント。

    SHOWPLAN_ALL SQLServerクエリプロセッサが各ステートメントを実行するときに実行する手順を表す階層ツリーを形成する行のセットとして情報を返します。 SHOWPLAN_TEXTに似ています 、ただしSHOWPLAN_ALL より詳細な情報を返します(出力を処理できるアプリケーションで使用することを目的としています)。

    SHOWPLAN_ALLを設定できます ONのいずれかに またはOFF

    SHOWPLAN_ALLの場合 ONです 、後続のすべてのT-SQLステートメントは実行されません。代わりに、SQL Serverはステートメントの実行情報を(実行せずに)返します。

    SHOWPLAN_ALLに注意することが重要です 見積もりを提供します リソース要件の内、およびステートメントが実際に実行されるときに実際のリソース要件が異なる場合があります。

    実例を示します。

    SET SHOWPLAN_ALL ON;
    GO
    
    SELECT * FROM Cats;
    GO

    SET SHOWPLAN_ALLに注意してください ストアドプロシージャ内で指定することはできません。また、バッチ内の唯一のステートメントである必要があります。

    AzureDataStudioでの結果は次のようになります。

    垂直出力を使用した場合のmssql-cli(コマンドラインインターフェイス)の外観は次のとおりです。

    Commands completed successfully.
    -[ RECORD 1 ]-------------------------
    StmtText           | 
    SELECT * FROM Cats;
    StmtId             | 1
    NodeId             | 1
    Parent             | 0
    PhysicalOp         | NULL
    LogicalOp          | NULL
    Argument           | 1
    DefinedValues      | NULL
    EstimateRows       | 3
    EstimateIO         | NULL
    EstimateCPU        | NULL
    AvgRowSize         | NULL
    TotalSubtreeCost   | 0.0032853
    OutputList         | NULL
    Warnings           | NULL
    Type               | SELECT
    Parallel           | 0
    EstimateExecutions | NULL
    -[ RECORD 2 ]-------------------------
    StmtText           |   |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]))
    StmtId             | 1
    NodeId             | 2
    Parent             | 1
    PhysicalOp         | Clustered Index Scan
    LogicalOp          | Clustered Index Scan
    Argument           | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])
    DefinedValues      | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
    EstimateRows       | 3
    EstimateIO         | 0.003125
    EstimateCPU        | 0.0001603
    AvgRowSize         | 142
    TotalSubtreeCost   | 0.0032853
    OutputList         | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
    Warnings           | NULL
    Type               | PLAN_ROW
    Parallel           | 0
    EstimateExecutions | 1
    (2 rows affected)
    Commands completed successfully.

    列がたくさんあるので、読みやすくするためにここでは垂直出力を使用しました。

    クエリがより複雑な場合、より多くの行が返されます。

    これは(少し)複雑なクエリの例です。

    SELECT * FROM Cats c
    INNER JOIN Dogs d
    ON c.CatName = d.DogName;

    結果:

    オフにする方法

    SET SHOWPLAN_ALL OFFを使用してオフにできます 。

    これを実行すると、後続のステートメントは通常どおり実行されます。

    SET SHOWPLAN_ALL OFF;
    GO
    
    SELECT * FROM Cats;
    GO

    結果:

    Commands completed successfully.
    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 1       | Meow      |
    | 2       | Fluffy    |
    | 3       | Scratch   |
    +---------+-----------+
    (3 rows affected)
    Commands completed successfully.

    非推奨かどうか?

    この古いMSDNの記事によると、SET SHOWPLAN_ALL は将来のshowplanバージョンで廃止される予定であり、SET SHOWPLAN_XMLを使用することをお勧めします。 代わりに。

    ただし、そのMSDNの記事はSQL Server 2008 R2に関するものであり、私がこれを書いている時点では、SQL Server 2019で非推奨になっているようには見えません。実際、現在のドキュメントでは非推奨について言及されておらず、含まれていません。 SQLServerで非推奨のアイテムのリストを実行したとき。

    いずれにせよ、将来のリリースで使用する前に、これを念頭に置いておくとよいでしょう。

    グラフィカル実行プラン

    SSMSやAzureDataStudioなどのグラフィカルツールを使用している場合は、現在のクエリの推定グラフィカルクエリ実行プランを表示するオプションがある場合があります。

    • SSMSでは、 Ctrl + Lを使用できます これをする。または、推定実行プランの表示をクリックすることもできます アイコンをクリックするか、クエリウィンドウを右クリックして、[推定実行プランの表示]を選択します。 。
    • Azure Data Studioでは、説明をクリックできます クエリウィンドウの上にあるボタン。

    SET SHOWPLAN_XML ONを使用することもできます 有効にするには、SET SHOWPLAN_XML OFF 無効にします。


    1. SET NULL:SQLcl / SQL*PlusでNULL値が発生した場合に返される文字列を指定します

    2. 1つのSQLクエリに複数の行を挿入する方法–今週のインタビュー質問#069

    3. SQLサーバーがこのエラーをスローするのはなぜですか:値NULLを列'id'に挿入できませんか?

    4. SQLite-データベースをファイルにバックアップ