2016-07-20 13 views
0

Ich habe eine Abfrage:So erstellen Index für CTE

With Cte as (some code) 

Select * 
from Cte 
order by id 

Kann ich einen Index für diese CTE erstellen?

Ich benutze ms SQL Server 2005

Vielen Dank.

+3

Sie können den Index nicht zu cte hinzufügen. http://StackOverflow.com/Questions/3995958/Adding-an-Index-to-Acte –

+0

Sie können nicht, CTE ist wie eine dynamische Ansicht innerhalb der Anweisung. Sie müssen wahrscheinlich eine temporäre Tabelle erstellen und diese indexieren. –

+0

CTE erstellt keine temporäre Tabelle oder etwas, das indiziert werden kann. Es verwendet die Indizes der Tabelle während ihrer Ausführung. –

Antwort

1

Wie oben erwähnt, können Indizes zu einem CTE nicht hinzugefügt werden.

Allerdings kann das Hinzufügen einer ORDER BY-Klausel zu den verbundenen Feldern im CTE die Ausführungszeit reduzieren.

Sie müssen auch SELECT TOP 100 PROZENT HINZUFÜGEN, um eine ORDER BY in einer CTE-Auswahl zu ermöglichen.

0

Sie könnten eine materialisierte/indizierte Sicht als Basiswert anstelle eines CTE verwenden. Sie müssen die DDL im Voraus erstellen. Wenn die Abfrageleistung jedoch wichtig ist, kann dies hilfreich sein. Beachten Sie auch, dass Sie aufgrund der Schemabinding-Anforderung die zugrunde liegenden Tabellen nicht ändern können.

Verwandte Themen