Ich habe eine Datenbank, in der ich Inline-TVFs (Tabellenwertfunktionen) anstelle von Ansichten verwende. Zum Beispiel könnte ich zwei Tabellen mit den Namen [Automodell] und [Autohersteller] haben, die ich innerhalb der TVF [fnCarBrands] zusammenstelle.
Diese TVFs werden dann von anderen TVFs aufgerufen, um die weitere Verarbeitung und Berichterstattung durchzuführen. Also könnte ich meine Funktion [fnCarBrands] nehmen und mich der Tabelle [Kaufjahr] anschließen, um eine Funktion [fnCarBrandHistory] zu bilden. Und so weiter für mehrere Schichten von TVFs.
Ich könnte wahrscheinlich die gleiche Funktionalität mit Ansichten erhalten, da meine Inline-TVFs wirklich nur Verknüpfungen von Tabellen und anderen TVFs sind.
Wie ist die Leistung von auf diese Weise geschriebenen Inline-TVFs mit Ansichten zu vergleichen?
quelle
Antworten:
Das Abfrageoptimierungsprogramm behandelt eine Inline-Tabellenwertfunktion genau wie eine Ansicht:
Eine Tabellenwertfunktion mit mehreren Anweisungen wird eher wie eine gespeicherte Prozedur ausgeführt. Sie müssen normalerweise mehrmals ausgeführt werden, anstatt in die Hauptabfrage gefaltet zu werden:
quelle
Sie müssen ähnliche Ansichten wie die Funktionen erstellen und jeweils einen Blick auf den Ausführungsplan werfen, um zu sehen, was mit den einzelnen Funktionen los ist.
quelle
Das Erstellen von Ansichten, die andere Ansichten aufrufen, ist natürlich auch ein Leistungskiller. Gehen Sie diesen Weg nicht. Schreiben Sie die Abfragen, die Sie benötigen, und verwenden Sie weder TVFs noch Ansichten, wenn Sie Leistung wünschen. Es ist die Schichtung , die das Problem verursacht. Dies ist fast immer eine schlechte Sache, wenn Sie eine Datenbank abfragen, und Sie können schnell die Grenze der Anzahl der Tabellen erreichen, auf die Sie auch verweisen können, zumal Sie häufig auf die verweisen gleiche Tabellen in verschiedenen Schichten. Dies scheint zwar einfacher zu warten zu sein, ist es aber nicht. Versuchen Sie, eine Spalte aufgrund einer neuen Anforderung zu debuggen oder hinzuzufügen, wenn sich die zu reparierende Ebene unten befindet.
quelle