Hinzufügen eines INDEX zu einem CTE
Sollte ein ziemlich straight-forward Frage. Kann ich nachträglich einen INDEX auf eine Common Table Expression (CTE)?
Kommentar zu dem Problem
Könnte es irgendwie möglich mit etwas Herumspielen mit Planhinweislisten. Diesem Artikel von Quassnoi zeigt, wie ein plan guide, um die Ergebnisse einer CTE-Cache, indem ein EagerSpool auf den plan. Diese baut einen temporären index, der über Sie in tempdb.
@Martin Smith: WOW!!! Ich habe ein gutes Lesen, und versuchen, meinen Kopf um ihn herum alle 🙂
InformationsquelleAutor der Frage Neil Knight | 2010-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht.
Einen CTE, ist eine temporäre, "inline" anzeigen, können Sie nicht fügen Sie einen index aus, um eine solche zu konstruieren.
Wenn Sie einen index erstellen Sie eine normale Ansicht mit dem WÄHLEN Sie Ihre CTE, und machen es eine indizierte Sicht (durch hinzufügen eines gruppierten index für die Sicht). Sie müssen gehorchen, die einen Satz von Regeln, die hier beschrieben werden: Erstellen einer Indizierten Sicht.
InformationsquelleAutor der Antwort marc_s
Hatte ich die gleiche Forderung. Indizes können nicht Hinzugefügt werden zu einer CTE. Jedoch, in der CTE wählen Sie hinzufügen eines , UM DURCH - Klausel auf den verknüpften Feldern reduziert sich die Ausführungszeit von 20 Minuten oder mehr bis unter 10 Sekunden.
(Sie müssen auch HINZUFÜGEN, WÄHLEN Sie OBEN 100 PROZENT, damit ein AUFTRAG DURCH die in einem Allgemeinen Tabellenausdruck wählen Sie.)
[Bearbeiten hinzufügen sinnentstellende Zitat aus einem Kommentar unten]:
Wenn Sie deutlich in der CTE, dann TOP-100 PROZENT nicht funktioniert. Diese cheater-Methode ist immer verfügbar: ohne TOP bei allen in der select, ändern Sie die ORDER BY-Anweisung zu Lesen:
BESTELLUNG VON [Bla] OFFSET 0 ZEILEN
InformationsquelleAutor der Antwort Richard Vivian
@B H Zu erhalten, um das DEUTLICHE problem mit der Verwendung von TOP-100 - % oder TOP 1000000, Sie können immer mit GROUP BY. Dient dem gleichen Zweck und ist manchmal schneller als DISTINCT.
InformationsquelleAutor der Antwort Peg