2016-05-04 14 views
-1

現在のクエリは実行に時間がかかります。実行計画を実行すると、表挿入(#tempdata)、コスト:99%が表示されます。クエリを高速に実行するために、クラスタ化されていないインデックスを追加する必要があることに気付きました。だから私はこのコード行を追加したが、それでも差がない:クラスタ化されていないインデックスを追加する

create nonclustered index #temp_index 
    on [dbo].#tempData ([class_room]) include ([class_name],[class_floor],[class_building]) 

これは私が持っている現在のクエリです:

IF OBJECT_ID('tempdb..#tempdata') IS NOT NULL DROP TABLE #tempdata 

    SELECT [class_room][class_name],[class_floor],[class_building] 
    INTO #tempdata 
    FROM class_info x 

create nonclustered index #temp_index 
    on [dbo].#tempData ([class_room]) include ([class_name],[class_floor],[class_building]) 

;with cte1 as(
SELECT [class_room][class_name],[class_floor],[class_building] 
FROM #tempdata 
WHERE class_room <> '') 

select * from cte1 
+5

クラスタ化されていないインデックスを追加すると、ここで挿入パフォーマンスが向上すると思われます。テンポラリテーブルにいくつの行を入れていますか?一時テーブルが必要な理由がありますか? –

+2

CTEを*から選択するのはなぜですか?なぜclass_infoから#tempDataを選択するのではなく、class_room <> ''ですか?または、なぜテンポラリテーブルを作成するのですか?あなたは何を達成しようとしていますか? –

+0

@Tom:900万件のレコード –

答えて

1

これはコメントのために少し長いです。

このコードを実行していない理由を説明できますか?

SELECT [class_room], [class_name], [class_floor], [class_building] 
FROM class_info x 
WHERE class_room <> ''; 

パフォーマンスが問題になる場合は、まず、不要な読み取りと書き込み(一時テーブルの作成など)を取り除くことをおすすめします。

+0

私は先ほど質問した通り、class_roomの索引を作成すると助けにならないと尋ねました。右?問題は「索引内の局所性」です。 –

+0

はい、それは役に立たない –

関連する問題