Published on

November 28, 2011

Comprendre l’optimisation des requêtes SQL Server

Avez-vous déjà demandé pourquoi l’optimiseur a arrêté d’optimiser le plan d’exécution que vous regardez ? Il est en fait possible et simple d’obtenir cette information. Plongeons dans les détails.

Commençons par une requête simple :

SELECT * FROM Person.Address AS a;

Cela génère un plan d’exécution trivial. Vous pouvez voir que le niveau d’optimisation est défini sur “TRIVIAL”. Cela signifie que le plan n’est pas du tout passé par l’optimiseur. Il a simplement arrêté le processus.

Maintenant, considérons une requête plus complexe :

SELECT p.LastName + ', ' + p.FirstName AS FullName, a.AddressLine1, a.City, a.PostalCode 
FROM Person.Address AS a 
JOIN Person.BusinessEntityAddress AS bea ON a.AddressID = bea.AddressID 
JOIN Person.Person AS p ON bea.BusinessEntityID = p.BusinessEntityID 
WHERE a.AddressID = 252;

Cette requête ne renverra pas un plan trivial en raison de la complexité introduite par les jointures. Dans le plan d’exécution, vous pouvez voir que le niveau d’optimisation est défini sur “FULL”. La raison de l’arrêt anticipé est “Plan suffisamment bon trouvé”. Cela signifie que l’optimiseur a trouvé un plan considéré comme suffisamment bon en fonction des statistiques.

Cependant, les choses peuvent se compliquer davantage lorsqu’il s’agit de vues et de jointures imbriquées. Considérez l’exemple suivant :

SELECT * 
FROM HumanResources.vEmployee AS ve 
JOIN Sales.vSalesPerson AS vsp ON ve.BusinessEntityID = vsp.BusinessEntityID 
JOIN Sales.vSalesPersonSalesByFiscalYears AS vspsbfy ON vspsbfy.SalesPersonID = vsp.BusinessEntityID;

Cette requête en apparence simple produit un plan d’exécution complexe. Le niveau d’optimisation est défini sur “FULL”, mais la raison de l’arrêt anticipé est “Time Out”. Cela signifie que l’optimiseur a épuisé toutes ses tentatives de trouver un plan optimal et s’est contenté d’un plan sous-optimal.

Pourquoi cela se produit-il ? Le nombre de tables dans le plan d’exécution et la complexité globale de la requête peuvent surcharger l’optimiseur. Il est important de comprendre comment fonctionne l’optimiseur et d’essayer de l’aider là où il en a besoin.

Il existe une autre raison d’arrêt anticipé de l’optimiseur, qui est “Dépassement de la limite de mémoire”. Cela représente un problème sérieux et nécessite de prendre en compte la mémoire disponible sur votre serveur.

Comprendre l’optimisation des requêtes SQL Server peut vous aider à écrire des requêtes plus efficaces et à améliorer les performances. En connaissant le fonctionnement de l’optimiseur et les facteurs qui peuvent influencer ses décisions, vous pouvez optimiser vos requêtes et vous assurer qu’elles s’exécutent correctement.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.