Maison >base de données >tutoriel mysql >Fonctions table en ligne ou multi-instructions : laquelle est la plus performante ?

Fonctions table en ligne ou multi-instructions : laquelle est la plus performante ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-12 18:56:42992parcourir

Inline vs. Multi-Statement Table-Valued Functions: Which Performs Better?

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 :

  • Les statistiques de base de données sont cruciales pour l'optimisation.
  • L'opération est simple et en lecture seule.
  • Une vue virtuelle est nécessaire pour les requêtes.

Choisissez MSTVF lorsque :

  • Des calculs ou transformations complexes sont nécessaires.
  • Une table temporaire modifiable est nécessaire au sein de la fonction.
  • Les paramètres sont utilisés pour filtrer les résultats.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn