SQL - CTE-vs ANZEIGEN
Meine Frage hier ist was ist der Unterschied zwischen CTE
und View
im SQL. Ich meine, in dem Fall sollte ich verwenden CTE
und dem Fall der View
. Ich weiß, die beiden sind eine Art virtuelle Tabellen, aber ich kann nicht unterscheiden, Ihrer Verwendung.
Fand ich eine ähnliche Frage hier aber es geht um Leistung.
Update 1:
Beispiel: ich habe eine Datenbank, gefüllt mit trades(tbl_trade
). Ich brauche, um zu wählen von 3,5 Millionen Datensätze werden nur die trades, die geöffnet wurde, den aktuellen Monat, bis die aktuelle Zeit und dann die Daten manipulieren(mit verschiedenen Abfragen auf die virtuelle Tabelle - das sieht aus wie Ansicht). Das problem hier ist, dass ich möchte eine SUM
3-4 Spalten 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
werden gleich SUM(profit)
+SUM(bonus)
+SUM(expenses)
.
PS. Erneutes ausführen des Querys für die SUM
ist keine option, da ich bereits das Ergebnis.
Vielen Dank im Voraus!
- Ein view ist ein Objekt in der Datenbank. Eine CTE existiert nur für die Dauer einer einzigen Abfrage. Sie scheinen sehr unterschiedlich. Können Sie ein Beispiel geben, zwischen Ihnen zu wählen?
- Wie viel Daten, die Sie zu tun? CTE ausgiebig TempDb verwenden und wenn Ihr TempDb ist nicht richtig konfiguriert oder Ihre CTE ist der Umgang mit einer großen Anzahl von Zeilen, dann ist es nicht eine beste Wette. Wählen Sie "Ansicht" beim Umgang mit großen Datenmengen und CTE mit der kleinen. Sie können wählen, CTE, auch wenn Sie brauchen, Rekursion. Das ist alles !
- Hallo und vielen Dank für Ihre Antworten. siehe die aktualisierte Fragen
- überprüfen Sie meine aktualisierte Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ansichten können indiziert werden, aber CTE nicht. Dies ist ein wichtiger Punkt.
CTE hervorragende Arbeit auf
tree hierarchy
d.h. rekursiveÜberlegen Sie auch, wie einfach sich Ansichten beim Umgang mit komplexen Abfragen. Aussicht, ein physisches Objekt auf der Datenbank (aber nicht speichern Daten physisch) und kann verwendet werden, auf mehrere Anfragen, so bieten Flexibilität und zentralisierten Ansatz. CTE, auf der anderen Seite sind temporär und werden erstellt, wenn Sie verwendet werden; das ist, warum Sie genannt werden, wie
inline view
.Update
Entsprechend aktualisiert Ihre Frage, Ansichten die richtige Wahl. Umgang mit 3.5 Mio Zeilen in CTE erstellen zusätzlicher Aufwand für die TempDb-das wird schließlich verlangsamen die Leistung von SQL Server. Denken Sie daran, CTE ist ein Einweg-Ansicht daher keine Statistiken werden gespeichert und Sie können es nicht schaffen, die Indizes zu. Es ist einfach wie eine sub-Abfrage.
column1+column2 as column3
und stellen Sie ihn in die Abfrage?Beide werden interpretiert genau das gleiche durch den Plan Optimizer. Es ist nur eine andere Sache.
Einer Ansicht kann verwendet werden, auf seine eigene. Es können Kapseln komplexe Anweisungen, um eine einfache Abfrage.
Waren CTE wird meist verwendet, um zu schreiben, sauberer code mit weniger Redundanz in den Verfahren/Ansichten zum Beispiel. Sie können einen Allgemeinen Tabellenausdruck für eine rekursive Abfragen zu, das ist eine sehr große und leistungsfähige Funktion!
Ich hoffe, das hilft, Klarheit zu schaffen.
Einer der Gründe für die Wahl von CTE: Wenn Sie das tun, hierarchische Abfragen Allgemeine Tabellenausdrücke verwenden. Allgemeine Tabellenausdrücke können rekursiv aufgerufen. Ansichten lassen sich nicht rekursiv aufgerufen.