2

withSQL Serverで句はどのように機能しますか?それは本当にパフォーマンスを向上させるのでしょうか、それともより読みやすいスクリプトを作成するのに役立つのでしょうか?

いつ使うのが正しいですか?with使用を開始する前に、句について何を知っておく必要がありますか?

これが私が話していることの例です:

http://www.dotnetspider.com/resources/33984-Use-With-Clause-Sql-Server.aspx

4

3 に答える 3

5

パフォーマンスの利点については完全にはわかりませんが、サブクエリを使用するとサブクエリが複数回実行される場合に間違いなく役立つと思います。

それとは別に、それは間違いなくコードを読みやすくすることができ、複数のサブクエリが異なる場所で同じコードのカットアンドペーストになる場合にも使用できます。

使用する前に何を知っておくべきですか?大きな欠点は、ビューにCTEがある場合、そのビューにクラスター化されたインデックスを作成できないことです。SQL Serverにはマテリアライズドビューがなく、以前は確かに私を噛んだことがあるため、これは大きな問題になる可能性があります。

于 2010-05-18T10:38:07.553 に答える
4

再帰機能を使用しない限り、aCTEは単純なインラインビューよりもパフォーマンスの面で優れているわけではありません。

タイピングを節約するだけです。

オプティマイザーは、再利用するときに再評価するかどうかを自由に決定できます。ほとんどの場合、オプティマイザーは再評価することを決定します。

WITH    q (uuid) AS
        (
        SELECT  NEWID()
        )
SELECT  *
FROM    q
UNION ALL
SELECT  *
FROM    q

2つの異なるを返しますNEWIDs

他のエンジンは異なる動作をする可能性があることに注意してください。

PostgreSQLとは異なりSQL Server、を実現しCTEsます。

Oracle/*+ MATERIALIZE */オプティマイザにマテリアライズするかどうかを指示する特別なヒント、をサポートしCTEます。

于 2010-05-18T11:21:44.197 に答える
0

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
于 2017-07-05T04:51:39.467 に答える