2016-04-29 9 views
1

Kann jemand bitte den Unterschied zwischen CTE-Tabellen (Common Table Expression) und Volatile-Tabellen erläutern, in denen sie bessere Ergebnisse erzielen.Vergleichen zwischen CTE- und Volatile-Tabellen in Teradata

Wie können wir & Drop volatilen Tabellen als Teil unserer SQL wo genau CTE wird besser im Vergleich zu Volatile Tabellen erstellen?

+0

Bearbeiten: Haben Sie weitere Informationen von Teradata Entwickleraustausch (http://forums.teradata.com/forum/database/diff-between-cte-and-volatile-tables-in-teradata) – Satish

Antwort

1

Sie sind fast nicht vergleichbar, weil sie so unterschiedliche Objekte sind.

Eine flüchtige Tabelle ist eine tatsächliche Tabelle, die tatsächliche Daten speichert. Es wird wie eine normale Tabelle erstellt, jedoch mit dem Schlüsselwort VOLATILE (und anderen Problemen). Es und alle darin gespeicherten Daten verschwinden, wenn die Sitzung beendet ist.

Ein CTE auf der anderen Seite ist eher wie eine Ansicht. Es speichert keine Daten. Sie können es sich als ein Symbol vorstellen, das für das steht, was darin definiert ist.

Zum Beispiel:

WITH CTE myCTE (SELECT * FROM sometable WHERE id=3) 
SELECT * 
FROM myCTE 
WHERE myCTE.name in (SELECT max(name) FROM myCTE); 

ist genau das gleiche wie:

WITH CTE myCTE() 
SELECT * 
FROM (SELECT * FROM sometable WHERE id=3) myCTE 
WHERE myCTE.name in (SELECT max(name) FROM (SELECT * FROM sometable WHERE id=3) myCTE); 

Wo wir ersetzen Sie einfach das Symbol "myCTE" mit der select-Anweisung in Seite davon hängen.

Wenn Sie also fragen, welche Leistung besser ist ... gibt es keine Möglichkeit, dies zu beantworten, ohne die genaue Situation zu kennen, in der Sie versuchen, eine flüchtige Tabelle im Vergleich zu einem CTE zu verwenden.

Denken Sie daran, eine flüchtige Tabelle muss erstellt und mit Daten geladen werden, bevor sie abgefragt wird. Ein CTE ist nur eine Ansicht ... Wenn Sie also länger brauchen, um Ihr CTE abzufragen, als die volatile Tabelle zu erstellen, zu laden und abzufragen, dann ... gehen Sie mit dem CTE. Wenn Sie in einer Prozedur immer wieder die gleichen Datenmengen wiederholen und einen Speicherplatz für die temporäre Speicherung dieses Datensatzes benötigen, verwenden Sie die flüchtige Tabelle.

+0

Hallo Nevill, Danke für die Antwort, Können Sie mir bitte klarstellen, dass, wann immer wir CTE in unseren SQL-Teilen beziehen, die ganze SQL erneut ausgeführt wird ?? – Satish

+0

Ziemlich viel, ja. Auch hier können Sie den Cte-Namen/Alias ​​für das, was in ihm definiert ist, einfach herausfiltern, um besser zu verstehen, wie er ausgeführt werden könnte. Es ist wirklich nur für Code Lesbarkeit und Code-Wartung. – JNevill