1

以下のSQLコードがあります。完了するのに永遠に時間がかかりますが、 だけを実行すると、すぐSELECT DISTINCT ID, ParentID FROM Y WHERE ID IN (3,4)に完了します。

DECLARE @table TABLE
(
  ID int,
  ParentID int
)

INSERT INTO @table 
SELECT DISTINCT ID, ParentID FROM Y WHERE ID IN (3,4)

SELECT * FROM @table

何が起こっているのか、これは意味がありません。

4

3 に答える 3

2

代わりに一時テーブルを使用してみてください。テーブル変数は1行のみに最適化されており、それが取得されるものであると想定しています。

詳細はこちら

于 2012-11-08T06:07:45.343 に答える
1

ほぼ瞬時に実行される単純なSELECTですが、データセットが大きい場合、条件を処理する前にすべてのデータを収集するため、INにははるかに長い時間がかかります。その場所で使用して存在すると、おそらくはるかに高速に実行されます。

于 2012-11-08T01:45:45.853 に答える
1

この動作には複数の理由が考えられます。実行計画がなければ、理由を推測することしかできず、正確な理由を確認することはできません。

  1. DISTINCT IDクエリで使用してIDいるため、主キーではないと思います。句で使用PKするクエリを変更できますか。WHERE

  2. テーブル Y のデータが大きすぎて、数百万のオーダーである可能性があります。また、(テーブル上で) & Exists (クエリ内で) インデックスが作成されていないため、クエリに時間がかかる可能性があります。

  3. 速度を確認するためだけにこのコードを試してください

    SELECT DISTINCT ID, ParentID
    FROM Y WHERE ID IN (3,4)
    
于 2012-11-08T03:37:53.590 に答える