2012-04-27 11 views

答えて

1

どのくらいの大きさですか?プロファイラでは、持続時間はマイクロ秒単位で保存されることがわかります。したがって、1000000は1秒を意味します。

さらに、実行計画の再利用やSSMSはUIツールであり、クエリをデータベースに送信する前に何か他のことを行っている可能性があることを考慮する必要があります。 DB上の実行から直接統計を取得すると、実行に数秒かかることがあります。

+0

はい、プロファイラの所要時間はマイクロ秒です。正確な値は13958727で、約13秒です。ただし、同じクエリを正常に実行すると、約2〜3秒かかるだけです。 –

+0

次の質問は、SSMSがクエリを最適化しているという事実に基づいて、クエリ実行時間の大きな違いを説明できるかどうかです。 –

+0

いいえ... 13958727の値はどうでしたか?クエリはどこから実行されましたか? SSMSを開くと、プロファイルでトレースを開始し、SSMSでクエリを実行すると、値は同じ(または非常に近い) – Diego

1

動的に生成されるSPのプロファイリング部分のバージョンはありますか?

.. 
@sql = 'select * from ' + @tablename 
exec (@sql) 

ほとんどのSPは、上記事前にコンパイルなることはないだろうスニペットとしてコンパイル済みの非静的コードとの最初の実行が、SPの後にあります。しかし、あなたが実行していたクエリウィンドウ内にある場合

select * from the_table_name 

これは表示されている違いを示している可能性があります。私は恐れているが、推測のビット。クエリがSPの一部である場合、クエリの実行方法について詳しく知ることができます。

+0

はい、プロファイリングするクエリは動的に生成されるSPの一部です。このようなその何か: - 幹部sp_executesqlをN'SELECT this_.Id Id167_1_、incomingfi1_.IdとしてId164_0_としてBusinessObject_SourceCMEHMatchRecord FROM this_インナーはthis_.SystemId BY this_.IncomingFile = incomingfi1_.Id WHERE incomingfi1_.SystemId = @ P0 ORDERにBusinessObject_IncomingFileのincomingfi1_に参加asc。 '、N' @ p0 int '、@ p0 = 1 しかし、このクエリをSSMS経由で実行すると、完全なクエリ(exec sp付き)または選択部分(パラメータ付き)時間。 –

+0

私が考えることができる唯一の理由は、正しいかどうかわからないのは、元のクエリがWebアプリケーションから起動されているため、Webサーバにデータをフェッチする時間も含まれている可能性があります。 SSMSを実行する場合、データを取得するのは簡単ではありません。 –

+0

ああ、サーバーで直接クエリを実行していますか? webappは遠隔地ですか?これをプロファイリングしている場合でも、クエリがサーバー上でどれくらいの時間かかるかは測定する必要はありません。なぜなら、唯一の '動的な'部分がwhereステートメントの変数であるように、そのような方法でクエリを構築する必要があるのか​​どうかはわかりません。 – Paul

関連する問題