SQL - CTE gegen VIEW

7

Meine Frage hier ist, was der Unterschied zwischen CTE und View in SQL ist. Ich meine, in diesem Fall sollte ich den CTE und den Fall View verwenden. Ich weiß, dass beide eine Art virtuelle Tabellen sind, aber ich kann ihre Verwendung nicht unterscheiden.

Ich habe eine ähnliche Frage hier gefunden, aber es geht um die Leistung.

Update 1:

Zum Beispiel: Ich habe eine Datenbank mit Trades gefüllt ( tbl_trade ). Ich muss aus 3.5 Millionen Datensätze nur die Trades auswählen, die den aktuellen Monat bis zur aktuellen Zeit geöffnet wurden und dann die Daten manipulieren (mit unterschiedlichen Abfragen auf der virtuellen Tabelle - das sieht wie View aus). Das Problem hier ist, dass ich ein SUM von 3-4 Spalten will und dann muss ich SUM einige Spalten und erstellen Sie eine virtuelle Spalte mit dem Ergebnis (sieht aus wie CTE).

ZB: tbl_trade hat Spalten: profit , bonus und expenses . Ich brauche SUM(profit) , SUM(bonus) , SUM(expenses) und eine neue Spalte total , die gleich SUM(profit) + SUM(bonus) + SUM(expenses) ist.

PS. Das Ausführen der Abfragen für SUM ist keine Option, da ich bereits das Ergebnis habe.

Vielen Dank im Voraus!

    
BlackM 18.06.2015, 14:45
quelle

3 Antworten

11

Ansichten können indiziert werden, aber CTE nicht. Das ist also ein wichtiger Punkt.

CTE funktioniert ausgezeichnet auf tree hierarchy d. rekursiv

Betrachten Sie auch Ansichten beim Umgang mit komplexen Abfragen. Ansichten, die ein physisches Objekt in der Datenbank sind (aber nicht physisch speichern) und für mehrere Abfragen verwendet werden können, bieten somit Flexibilität und zentralisierten Ansatz. CTE hingegen sind temporär und werden bei ihrer Verwendung erstellt; deshalb heißen sie inline view .

Aktualisieren

Entsprechend Ihrer aktualisierten Frage werden Ansichten die richtige Wahl sein. Der Umgang mit 3.5 Millionen Zeilen in CTE wird zusätzlichen Overhead auf TempDb verursachen, der schließlich die SQL Server-Leistung verlangsamen wird. Denken Sie daran, CTE ist eine Einwegansicht, daher werden keine Statistiken gespeichert und Sie können auch keine Indizes erstellen. Es ist wie eine Unterabfrage.

    
Anuj Tripathi 18.06.2015, 15:02
quelle
6

Beide werden vom Plan Optimizer genau gleich interpretiert. Es ist nur eine andere Sache.

Eine Ansicht kann eigenständig verwendet werden. Es kann komplexe Anweisungen in eine einfachere Abfrage kapseln.

Wurde ein CTE hauptsächlich verwendet, um saubereren Code mit geringerer Redundanz in Prozeduren / Ansichten zu schreiben. Sie können ein CTE auch für rekursive Abfragen verwenden, was eine sehr gute und mächtige Funktion ist!

Ich hoffe, dies hilft, Dinge zu klären.

    
Ionic 18.06.2015 14:52
quelle
3

Einer der Gründe für die Auswahl von CTE: Wenn Sie hierarchische Abfragen durchführen, verwenden Sie CTEs. CTEs können rekursiv aufgerufen werden. Ansichten können nicht rekursiv aufgerufen werden.

    
zedfoxus 18.06.2015 14:51
quelle