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

SQLServerのSTATISTICSPROFILEとは何ですか?

    SQL Serverでは、SET STATISTICS PROFILEを使用できます。 T-SQLステートメントのプロファイル情報を表示するステートメント。

    STATISTICS PROFILE アドホッククエリ、ビュー、およびストアドプロシージャで機能します。

    STATISTICS PROFILEの場合 ONに設定されています 、実行された各クエリは通常の結果セットを返し、その後にクエリ実行のプロファイルを示す追加の結果セットが続きます。

    これがデモンストレーションの簡単な例です。

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

    結果:

    これにより、SHOWPLAN_ALLと同じ列が返されます。 プラス2つの追加()を返します および実行 列)。

    このスクリーンショットは、AzureDataStudioでそのステートメントを実行したときに撮影されました。

    もう1つの簡単な例を次に示します。今回は、mssql-cli(コマンドラインインターフェイス)でステートメントを実行します。

    SET STATISTICS PROFILE ON;
    GO
    
    SELECT * FROM Cats;
    GO

    結果(垂直出力を使用):

    Commands completed successfully.
    +---------+-----------+
    | CatId   | CatName   |
    |---------+-----------|
    | 1       | Meow      |
    | 2       | Fluffy    |
    | 3       | Scratch   |
    +---------+-----------+
    (3 rows affected)
    -[ RECORD 1 ]-------------------------
    Rows               | 3
    Executes           | 1
    StmtText           | SELECT * FROM Cats
    StmtId             | 1
    NodeId             | 1
    Parent             | 0
    PhysicalOp         | NULL
    LogicalOp          | NULL
    Argument           | NULL
    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 ]-------------------------
    Rows               | 3
    Executes           | 1
    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.

    オフにする方法

    STATISTICS PROFILEを有効にするには オフの場合は、OFFを使用して再度実行します ONの代わりに :

    SET STATISTICS PROFILE OFF;
    GO

    STATISTICS PROFILEです 非推奨ですか?

    現在のドキュメントではそれについて言及されていませんが、SET STATISTICS PROFILE 将来のショープランバージョンでは廃止が予定されているようです。

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

    また、SET STATISTICS XMLの現在のドキュメント これをサポートします:

    SETSTATISTICSPROFILEとSETSTATISTICSXMLは、相互に対応しています。前者はテキスト出力を生成します。後者はXML出力を生成します。 SQL Serverの将来のバージョンでは、新しいクエリ実行プラン情報は、SET STATISTICS PROFILEステートメントではなく、SETSTATISTICSXMLステートメントを介してのみ表示されます。

    したがって、おそらくSET STATISTICS XMLを使用することにはメリットがあります。 SET STATISTICS PROFILEの代わりに 可能な場合。


    1. INSERT INTO...RETURNING-あいまいな列参照

    2. OracleSQLで日付関数を操作する方法

    3. PostgreSQLのシステム列を理解する

    4. JDBCCreateTableの使用例ステートメント