Maison >base de données >tutoriel mysql >Fonctions table en ligne ou multi-instructions : laquelle est la plus performante ?
Fonctions valorisées par table : instructions en ligne ou multi-instructions – Une analyse des performances
La sélection entre les fonctions table-value (TVF) en ligne et multi-instructions a un impact significatif sur les performances des requêtes. Cette comparaison met en évidence les principales différences et fournit des conseils sur une utilisation optimale.
Fonctions à valeur de table en ligne (ITVF)
Les ITVF, similaires aux vues, exploitent les structures de table et les statistiques en temps réel, conduisant souvent à des plans d'exécution supérieurs. Voici un exemple :
<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>
Fonctions à valeurs de table multi-instructions (MSTVF)
Les MSTVF utilisent une structure de table prédéfinie et n'ont pas accès aux statistiques en temps réel. Leur structure diffère comme suit :
<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>
Considérations relatives aux performances
En général, les ITVF surpassent les MSTVF en raison de leur capacité à exploiter des statistiques en temps réel. Cependant, les MSTVF pourraient être plus efficaces pour les opérations complexes difficiles à mettre en œuvre au sein d'un ITVF.
Quand utiliser quel type de fonction
Choisissez les ITVF lorsque :
Choisissez MSTVF lorsque :
Conclusion
Le choix optimal entre ITVF et MSTVF dépend entièrement de la tâche spécifique. Cependant, les ITVF sont généralement préférés pour leurs avantages en termes de performances et leur meilleure utilisation des statistiques de base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!