web-dev-qa-db-ja.com

CTEへのINDEXの追加

かなり簡単な質問です。共通テーブル式(CTE)にINDEXを追加できますか?

36
Neil Knight

番号。

CTEは一時的な「インライン」ビューです。このような構造にインデックスを追加することはできません。

インデックスが必要な場合は、CTEのSELECTを使用して通常のビューを作成し、それをインデックス付きビューにします(ビューにクラスター化インデックスを追加します)。ここで概説されている一連のルールに従う必要があります: インデックス付きビューの作成

19
marc_s

同じ要件があります。インデックスをCTEに追加することはできません。ただし、CTEの選択では、結合フィールドにORDER BY句を追加すると、実行時間が20分以上から10秒未満に短縮されました。

(CTE selectでORDER BYを許可するには、SELECT TOP 100 PERCENTも追加する必要があります。)

[下のコメントから言い換え引用を追加するために編集]:
CTEにDISTINCTがある場合、TOP 100 PERCENTは機能しません。この詐欺師の方法は常に利用可能です。selectでTOPをまったく必要とせずに、ORDER BYステートメントを次のように変更します。
ORDER BY [Blah] OFFSET 0 ROWS

58
Richard Vivian