Ich bin dabei, die Leistung einiger SQL zu verbessern, derzeit werden CTEs mehrfach im Skript verwendet und referenziert. Würde ich stattdessen Verbesserungen mit einer Tabellenvariablen erhalten? (Eine temporäre Tabelle kann nicht verwendet werden, da der Code innerhalb von Funktionen liegt).Was sind die Vorteile/Nachteile der Verwendung eines CTE?
Antwort
Sie müssen wirklich Leistungstest - Es gibt keine Ja/Nein-Antwort. Wie in Andy Living's Beitrag oben erwähnt, ist ein CTE nur eine Abkürzung für eine Abfrage oder Unterabfrage.
Wenn Sie es zweimal oder öfter in derselben Funktion aufrufen, erhalten Sie möglicherweise eine bessere Leistung, wenn Sie eine Tabellenvariable füllen und dann zu/aus diesem Element auswählen. Da Tabellenvariablen jedoch irgendwo Platz beanspruchen und keine Indizes/Statistiken haben (mit Ausnahme eines deklarierten Primärschlüssels für die Tabellenvariable), gibt es keine Möglichkeit zu sagen, welche schneller sein wird.
Sie haben beide Kosten und Einsparungen, und das ist der beste Weg, hängt von den Daten ab, die sie ziehen und was sie damit machen. Ich war in Ihrer Situation und nach dem Testen für die Geschwindigkeit unter verschiedenen Bedingungen - Einige Funktionen verwendet CTEs, und andere verwendet Tabellenvariablen.
Wahrscheinlich nicht. CTEs eignen sich besonders gut zum Abfragen von Daten für Baumstrukturen.
Siehe Craig Freedman detaillierte Erklärung für SQL Server [Link Text] (http://blogs.msdn.com/craigfr/archive/2007/10/18/ctes-common-table-expressions.aspx) –