with
SQL Serverで句はどのように機能しますか?それは本当にパフォーマンスを向上させるのでしょうか、それともより読みやすいスクリプトを作成するのに役立つのでしょうか?
いつ使うのが正しいですか?with
使用を開始する前に、句について何を知っておく必要がありますか?
これが私が話していることの例です:
http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx
with
SQL Serverで句はどのように機能しますか?それは本当にパフォーマンスを向上させるのでしょうか、それともより読みやすいスクリプトを作成するのに役立つのでしょうか?
いつ使うのが正しいですか?with
使用を開始する前に、句について何を知っておく必要がありますか?
これが私が話していることの例です:
http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx
パフォーマンスの利点については完全にはわかりませんが、サブクエリを使用するとサブクエリが複数回実行される場合に間違いなく役立つと思います。
それとは別に、それは間違いなくコードを読みやすくすることができ、複数のサブクエリが異なる場所で同じコードのカットアンドペーストになる場合にも使用できます。
使用する前に何を知っておくべきですか?大きな欠点は、ビューにCTEがある場合、そのビューにクラスター化されたインデックスを作成できないことです。SQL Serverにはマテリアライズドビューがなく、以前は確かに私を噛んだことがあるため、これは大きな問題になる可能性があります。
再帰機能を使用しない限り、aCTE
は単純なインラインビューよりもパフォーマンスの面で優れているわけではありません。
タイピングを節約するだけです。
オプティマイザーは、再利用するときに再評価するかどうかを自由に決定できます。ほとんどの場合、オプティマイザーは再評価することを決定します。
WITH q (uuid) AS
(
SELECT NEWID()
)
SELECT *
FROM q
UNION ALL
SELECT *
FROM q
2つの異なるを返しますNEWIDs
。
他のエンジンは異なる動作をする可能性があることに注意してください。
PostgreSQL
とは異なりSQL Server
、を実現しCTEs
ます。
Oracle
/*+ MATERIALIZE */
オプティマイザにマテリアライズするかどうかを指示する特別なヒント、をサポートしCTE
ます。
with
一時的な結果を一時的なテーブルに格納するだけのSQLのキーワードです。例:
with a(--here a is the temporary table)
(id)(--id acts as colomn for table a )
as(select colomn_name from table_name )
select * from a