CTE (Common Table Expression) vs temporären Tabellen oder Table-Variablen, welche ist schneller?
CTE
(Common Table Expression) vs Temp tables
oder Table variables
, was ist schneller?
Einfach: ES HÄNGT davon ab! - es gibt KEINE eine einzige Antwort auf diese - eigentlich hängt es davon ab, Ihre Daten (wie viel? Welche Art?), wie Komplex Ihre CTE ist..... Wie es ist, und dies ist unmöglich zu beantworten, wirklich....
Ich habe derzeit eine Table-variable-basierte Lösung, die ich dachte, der Wechsel zu einem CTE, der vorhandenen Abfrage mit 3 verbindet, und eine Menge von Datum-basierte Prüfungen. Daher dachte ich, wenn CTE würde etwas verbessern?
können Sie zeigen Sie uns Ihre Abfrage?? Wieder: ohne wissen, was genau du tun wirst, ist es unmöglich zu machen, keine wirklich nützlichen Kommentar...
Ich habe derzeit eine Table-variable-basierte Lösung, die ich dachte, der Wechsel zu einem CTE, der vorhandenen Abfrage mit 3 verbindet, und eine Menge von Datum-basierte Prüfungen. Daher dachte ich, wenn CTE würde etwas verbessern?
können Sie zeigen Sie uns Ihre Abfrage?? Wieder: ohne wissen, was genau du tun wirst, ist es unmöglich zu machen, keine wirklich nützlichen Kommentar...
InformationsquelleAutor Numan | 2011-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben wir eine 50% Zunahme der Geschwindigkeit bewegt, um die CTE in einem bestimmten Fall, also es lohnt sich, es zu gehen, aber alle performance-bezogene Verbesserungen werden müssen, Sitzbank markiert, damit Sie vergleichen können einer gegen den anderen.
PS: wir schrieben mehr als eine Abfrage mit einem CTE in Sie, bevor wir die, die wir jetzt benutzen.
InformationsquelleAutor Patrick
Wie ich schon sagte in meinem Kommentar: ES HÄNGT!
Es wirklich tut, hängt von deiner Abfrage, die Ihre Daten (wie viel ist da? Welche Art ist es??) und vieles mehr.
Ein paar Stichpunkte zu merken, aber:
CTE ist ein "inline-view" gültig nur für die nächste Anweisung, wenn möglich, SQL-Server eine temporäre Ergebnis im Speicher
Temp-Tabellen kommen in zwei Sorten: diejenigen sichtbar, um Ihre Verbindung nur (
create table #temp
), oder diejenigen, die Global sichtbar für alle verbindungen (create table ##temp
); beide werden automatisch gelöscht, wenn keine Verbindung mehr mit Ihnen. Definieren Sie die Indizes auf temporäre Tabellen, und Sie sind Teil von TransaktionenTabelle Variablen, die nicht erlauben die Erstellung von Indizes auf Sie zu, noch nehmen Sie an der Transaktions-Tanz - dies kann ein pro-oder Kontra - einfach nur bewusst zu sein! Ein
ROLLBACK
hat keine Auswirkung auf die Daten in einer Tabelle enthaltene Variablen....InformationsquelleAutor marc_s
http://royalarun.blogspot.in/2013/10/difference-between-cte-and-temp-table.html
Differenz zwischen CTE und temporären Tabellen und Tabellenvariablen in SQL Server
Temporäre Tabellen werden physisch erstellt, in der Tempdb-Datenbank. Diese Tabellen handeln wie normale Tabelle und kann auch constraints, index, wie normale Tabellen. Es gliedert sich in zwei Lokale temporäre Tabellen und Globale temporäre Tabelle,
Lokale Temp-Tabelle sind nur für die SQL Server-Sitzung oder Verbindung (single-user), dass die erstellten Tabellen.
Globale temporäre Tabellen sind verfügbar, um alle SQL Server-Sitzungen oder verbindungen (also alle user).
Diese kann erstellt werden, indem eine beliebige SQL Server-Verbindung, Benutzer, und diese werden automatisch gelöscht, wenn Sie alle SQL Server-verbindungen geschlossen wurden.Fällen, wo Sie brauchen, rollback der Transaktion unterstützen.
CTE - Common table Expression ist eine benannte temporäre Ergebnismenge, die verwendet wird, um zu manipulieren, die komplexe sub-queries Daten. Diese besteht für den Umfang der Erklärung. Dies ist im Speicher erstellt, anstatt Tempdb-Datenbank. Sie können nicht erstellen ein index auf CTE.
Table-Variable verhält sich wie eine variable und existiert für einen bestimmten charge von der Ausführung der Abfrage. Es wird automatisch gelöscht, sobald es aus dem Stapel. Dies wurde auch in der Tempdb-Datenbank, aber nicht die Erinnerung.Sie können nicht erstellen Sie einen nicht gruppierten index für eine Tabelle variable, es sei denn, der index ist ein Nebeneffekt einer PRIMARY KEY-oder UNIQUE-Einschränkung für die Tabelle.
Wenn die Ergebnismenge klein ist, der table-variable ist immer die optimale Wahl.
InformationsquelleAutor Arun Prakash