2010-11-24 7 views
5

私はしばしば、ストアドプロシージャがプリコンパイルされていると言う人がいると聞いてきました。どういう意味ですか?"ストアドプロシージャはプリコンパイルされています"という意味は何ですか?

実際には、格納されたprocにクエリを書き込み、コンパイルします。構文上の誤りがあれば、それは文句を言う。だからそうであれば、コンパイルはその時点で起こっています。

"Pre"は何を指していますか?

+0

実際には「プリコンパイル済み」です。これは、 "コンパイルする"という動詞の過去の分詞です。 – thomaspaulb

答えて

4

は、彼らは実際には事前に解析され、構文/セマンティクスは、CREATEおよびALTER

クエリプランがコンパイルおよび再利用の概要については、需要

で発生し

「コンパイル」は、参照"Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005 "

上で確認されています

用語(意味)はSQL Server 6.5に戻ります。 SQL Server 7.0で始まった以前のホワイトペーパーのリンクで強調表示されている「新しい」方法

+0

先生、あなたはあらかじめパースしたと言った。プレは何ですか?私はこの分野で非常に新しいです。私の質問はとてもばかげて聞こえるかもしれません。しかし教えてください..私は –

+0

を学びたいと思っています。CREATE/ALTERをチェックすることは、プランを生成することとは異なります。構文などは、CREATE/ALTERでチェックされます。この時点で、格納されたprocはコンパイルされません。 "pre-compiled"は、 – gbn

1

Microsoft SQL Serverでは、ストアドプロシージャは初めて実行されるときにクエリプランにコンパイルされます。

その後の実行では、ソースから再コンパイルされることがありますが、必ずしもそうではありません。そういうわけで、彼らは「プリコンパイル」と呼ばれています。

常に再コンパイルするように指定しない限り、またはsp_recompileを実行して次の実行時に再コンパイルを強制するよう指定していない限り、

+0

の2番目のリンクを参照してください。これは、あらかじめコンパイルされていないことを意味します。「ストアドプロシージャは、初めて実行されたときにクエリプランにコンパイルされる」ため、最初のクエリを初めて作成したときは、クエリプランのみがキャッチされます。そして次回以降、私たちがspを変更すると、再コンパイルはクエリプランに基づいて行われます。私が間違っていると私を訂正してください! –

+0

'ALTER PROC'が実行された後では再コンパイルされないので、これは技術的には事前コンパイルではありません。しかし、私が知る限り、ALTER PROCの後の最初の 'EXEC'で常に再コンパイルされます。キャッシュされたクエリプランは、再コンパイルが強制的に使用された場合には、 'ALTER'がなく、上書きするオプションがない場合にのみ使用されます。 – thomaspaulb

+0

参照:http://stackoverflow.com/questions/1048572/how-to-precompile-stored-procedures-in-sql-server – thomaspaulb

1

ストアドプロシージャのSQLコンテンツは、実行すると解析されません。 SQL構文解析は非常に時間のかかる操作になります。

関連する問題