2016-08-05 14 views
0

私はカップルパラメータを持つストアドプロシージャを持っています。私のデータテーブルタイプは2列(int, nvarchar)です。SqlDataRecordsをプロシージャに渡すと、9回以上実行するのが遅くなりますか?

このストアドプロシージャを実行し、IEnumerable<SqlDataRecords>に定義された型を渡すと、自分のマシン上のクエリ結果は、このパラメータを渡さずに同じストアドプロシージャよりも9倍遅くなります。

ストアドプロシージャはこのパラメータには触れません。渡すだけ。

構造化された(テーブル値の)値として渡されるデータでは、何か(SQL Server?)のように見えます。

多分私は何かを逃しています。

  • 何も他の検証のいずれかの種類のオフ

    • :多分に特別なスイッチがありますか?

    タイプ:

    CREATE TYPE dbo.MyData AS TABLE 
    (
        [Ver] INT NOT NULL, 
        [Name] NVARCHAR(225) NOT NULL 
    ) 
    

    ストアドプロシージャ:

    CREATE PROCEDURE [dbo].[SaveData] 
        (@Id UNIQUEIDENTIFIER, @Data MyData READONLY) 
    AS 
    BEGIN 
        SET NOCOUNT ON; 
    END 
    

    UPDATE 1:

    私は、クエリを変更しました。このストアドプロシージャは何もしません。差は渡す値またはヌルです。

    UPDATE 2:

    追加されたストアド・プロシージャおよびタイプ定義。

    UPDATE 3:

    私は、SQL Server 2014のExpressを使用しています。

    UPDATE 4:パラメータと

    5000反復テーブル値PARAMことなく、11281ms(443 /秒)かかり - 1029ms(4856 /秒)。

  • +2

    は、あなたのSPROCを投稿し、あなたが – mxmissile

    +0

    表情を渡す方法は不明のために最適化@JoelCoehoorn? –

    +0

    不明のための最適化に 'IEnumerable' – dariol

    答えて

    0

    SQLプロファイラを実行してデータベースのクエリを調べることをお勧めします。また、データベースを右クリックし、「アクティビティモニタ」をクリックしてSSMSアクティビティモニタを使用すると、「最近の高価なクエリ」という幸運なことがあります。

    HTH

    +0

    質問に更新2を追加しました。 – dariol

    +0

    あなたのデータベースを見ると、数え切れないほどのものがあるかもしれません。列挙可能なオブジェクトをクエリに渡す場合、通常は 'contains'または 'in'を使用します。クエリで指数関数的な時間が見られる場合は、インデックス、リレーションシップ、ネットワーク遅延などを調べることで開始できます。 – Programmer

    関連する問題