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

T-Sql挿入ステートメントで行コンストラクタ構文を使用する利点は何ですか?

    はい、次の間にかなり大きなパフォーマンスの違いがあります:

    declare @numbers table (n int not null primary key clustered);
    
    insert into @numbers (n)
    values (0)
         , (1)
         , (2)
         , (3)
         , (4);
    

    および

    declare @numbers table (n int not null primary key clustered);
    
    insert into @numbers (n) values (0);
    insert into @numbers (n) values (1);
    insert into @numbers (n) values (2);
    insert into @numbers (n) values (3);
    insert into @numbers (n) values (4);
    

    すべてのinsertという事実 ステートメントには独自の暗黙のトランザクションがあり、これを保証します。各ステートメントの実行プランを表示するか、set statistics time on;を使用して実行のタイミングを調整することで、簡単に証明できます。 。個々の挿入ごとにコンテキストの「設定」と「破棄」に関連する固定費があり、2番目のクエリはこのペナルティを5回支払う必要がありますが、最初のクエリは1回だけ支払います。

    listメソッドはより効率的であるだけでなく、派生テーブルを作成するためにも使用できます。

    select *
    from (values
        (0)
      , (1)
      , (2)
      , (3)
      , (4)
    ) as Numbers (n);
    

    この形式では、値の制限が1,000前後になり、リストを挿入する前に、リストに参加してフィルタリングすることができます。 insertに縛られていないことに気付くかもしれません。 まったく声明!事実上のテーブルとして、この構成はテーブル参照が有効な場所であればどこでも使用できます。



    1. DapperはMonoで動作しますか?

    2. 最後から2番目のレコードのみを取得します-mysql-query

    3. MySQLで列の文字セットと照合を設定する方法

    4. T-SQL 自由位置のマトリックス テーブルをクエリします。