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

SQL Server SHOWPLAN_TEXT

    SQL Serverでは、SET SHOWPLAN_TEXTを使用できます。 T-SQLステートメントの実行方法に関する詳細情報を返すステートメント。

    SHOWPLAN_TEXT SQLServerクエリプロセッサが各ステートメントを実行するときに実行する手順を表す階層ツリーを形成する行のセットとして情報を返します。

    SHOWPLAN_ALLに似ています 、それがより少ない詳細を返すことを除いて。したがって、SHOWPLAN_ALLの追加の詳細を処理できないアプリケーションを対象としています。 提供します。

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

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

    実例を示します。

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

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

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

    そして、mssql-cli(コマンドラインインターフェイス)での表示は次のとおりです。

    Commands completed successfully.
    +------------+
    | StmtText   |
    |------------|
    | 
    SELECT * FROM Cats c
    INNER JOIN Dogs d
    ON c.CatName = d.DogName;            |
    +------------+
    (1 row affected)
    +--------------------------------------------------------------------------------------------------------------------------------------+
    | StmtText                                                                                                                             |
    |--------------------------------------------------------------------------------------------------------------------------------------|
    |   |--Hash Match(Inner Join, HASH:([d].[DogName])=([Expr1003]), RESIDUAL:([Expr1003]=[Test].[dbo].[Dogs].[DogName] as [d].[DogName])) |
    |        |--Table Scan(OBJECT:([Test].[dbo].[Dogs] AS [d]))                                                                            |
    |        |--Compute Scalar(DEFINE:([Expr1003]=CONVERT_IMPLICIT(nvarchar(255),[Test].[dbo].[Cats].[CatName] as [c].[CatName],0)))       |
    |             |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F] AS [c]))                                |
    +--------------------------------------------------------------------------------------------------------------------------------------+
    (4 rows affected)
    Commands completed successfully.

    オフにする方法

    SET SHOWPLAN_TEXT OFFを使用してオフにすることができます 。

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

    SET SHOWPLAN_TEXT OFF;
    GO
    
    SELECT * FROM Cats c
    INNER JOIN Dogs d
    ON c.CatName = d.DogName;
    GO

    結果:

    Commands completed successfully.
    +---------+-----------+---------+-----------+-----------+
    | CatId   | CatName   | DogId   | DogName   | GoodDog   |
    |---------+-----------+---------+-----------+-----------|
    | 2       | Fluffy    | 2       | Fluffy    | 0         |
    +---------+-----------+---------+-----------+-----------+
    (1 row affected)
    Commands completed successfully.

    非推奨かどうか?

    この古いMSDNの記事によると、SET SHOWPLAN_TEXT は将来の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. JasperReportsを使用してOracleのblob列から画像を表示するにはどうすればよいですか?

    2. SQLServerのVIEWS情報スキーマビューを使用してビュー情報を取得する

    3. oracleより高速なページングクエリ

    4. 9つの最も一般的なデータベース設計エラー