Tabellenwertige Funktionen: Inline vs. Multi-Statement – Eine Leistungsanalyse
Die Auswahl zwischen Inline- und Multi-Statement-Table-Valued Functions (TVFs) hat erhebliche Auswirkungen auf die Abfrageleistung. Dieser Vergleich verdeutlicht die wichtigsten Unterschiede und gibt Hinweise zur optimalen Nutzung.
Inline-Tabellenwertfunktionen (ITVF)
ITVFs nutzen, ähnlich wie Ansichten, Tabellenstrukturen und Statistiken in Echtzeit, was oft zu besseren Ausführungsplänen führt. Hier ist ein Beispiel:
<code class="language-sql">CREATE FUNCTION MyNS.GetUnshippedOrders() RETURNS TABLE AS RETURN SELECT a.SaleId, a.CustomerID, b.Qty FROM Sales.Sales a INNER JOIN Sales.SaleDetail b ON a.SaleId = b.SaleId INNER JOIN Production.Product c ON b.ProductID = c.ProductID WHERE a.ShipDate IS NULL GO</code>
Tabellenwertige Funktionen mit mehreren Anweisungen (MSTVF)
MSTVFs nutzen eine vordefinierte Tabellenstruktur und haben keinen Zugriff auf Echtzeitstatistiken. Ihr Aufbau unterscheidet sich wie folgt:
<code class="language-sql">CREATE FUNCTION MyNS.GetLastShipped(@CustomerID INT) RETURNS @CustomerOrder TABLE (SaleOrderID INT NOT NULL, CustomerID INT NOT NULL, OrderDate DATETIME NOT NULL, OrderQty INT NOT NULL) AS BEGIN DECLARE @MaxDate DATETIME SELECT @MaxDate = MAX(OrderDate) FROM Sales.SalesOrderHeader WHERE CustomerID = @CustomerID INSERT @CustomerOrder SELECT a.SalesOrderID, a.CustomerID, a.OrderDate, b.OrderQty FROM Sales.SalesOrderHeader a INNER JOIN Sales.SalesOrderHeader b ON a.SalesOrderID = b.SalesOrderID INNER JOIN Production.Product c ON b.ProductID = c.ProductID WHERE a.OrderDate = @MaxDate AND a.CustomerID = @CustomerID RETURN END GO</code>
Leistungsüberlegungen
Im Allgemeinen übertreffen ITVFs MSTVFs aufgrund ihrer Fähigkeit, Echtzeitstatistiken zu nutzen. Allerdings sind MSTVFs möglicherweise effizienter für komplexe Vorgänge, die nicht einfach in einem ITVF implementiert werden können.
Wann welcher Funktionstyp verwendet werden soll
Wählen Sie ITVFs, wenn:
Wählen Sie MSTVFs, wenn:
Fazit
Die optimale Wahl zwischen ITVF und MSTVF hängt ganz von der konkreten Aufgabenstellung ab. Allerdings werden ITVFs im Allgemeinen aufgrund ihrer Leistungsvorteile und der besseren Nutzung von Datenbankstatistiken bevorzugt.
Das obige ist der detaillierte Inhalt vonInline- oder Tabellenwertfunktionen mit mehreren Anweisungen: Welche ist besser?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!