Dans SQL Server, vous pouvez utiliser le SET SHOWPLAN_TEXT
instruction pour renvoyer des informations détaillées sur la façon dont une instruction T-SQL est exécutée.
SHOWPLAN_TEXT
renvoie des informations sous la forme d'un ensemble de lignes qui forment une arborescence hiérarchique représentant les étapes suivies par le processeur de requêtes SQL Server lors de l'exécution de chaque instruction.
C'est similaire à SHOWPLAN_ALL
, sauf qu'il renvoie moins de détails. Il est donc destiné aux applications qui ne peuvent pas gérer les détails supplémentaires que SHOWPLAN_ALL
fournit.
Vous pouvez définir SHOWPLAN_TEXT
soit ON
ou OFF
.
Lorsque SHOWPLAN_TEXT
est ON
, toutes les instructions T-SQL suivantes ne sont pas exécutées. Au lieu de cela, SQL Server renvoie les informations d'exécution de l'instruction (sans l'exécuter).
Exemple
Voici un exemple pour illustrer.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Notez que SET SHOWPLAN_TEXT
ne peut pas être spécifié dans une procédure stockée et doit être la seule instruction d'un lot.
Voici à quoi ressemble le résultat dans Azure Data Studio :
Et voici à quoi cela ressemble dans mssql-cli (interface de ligne de commande) :
Commands completed successfully. +------------+ | StmtText | |------------| | SELECT * FROM Cats c INNER JOIN Dogs d ON c.CatName = d.DogName; | +------------+ (1 row affected) +--------------------------------------------------------------------------------------------------------------------------------------+ | StmtText | |--------------------------------------------------------------------------------------------------------------------------------------| | |--Hash Match(Inner Join, HASH:([d].[DogName])=([Expr1003]), RESIDUAL:([Expr1003]=[Test].[dbo].[Dogs].[DogName] as [d].[DogName])) | | |--Table Scan(OBJECT:([Test].[dbo].[Dogs] AS [d])) | | |--Compute Scalar(DEFINE:([Expr1003]=CONVERT_IMPLICIT(nvarchar(255),[Test].[dbo].[Cats].[CatName] as [c].[CatName],0))) | | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F] AS [c])) | +--------------------------------------------------------------------------------------------------------------------------------------+ (4 rows affected) Commands completed successfully.
Comment l'éteindre
Vous pouvez le désactiver en utilisant SET SHOWPLAN_TEXT OFF
.
Une fois que vous avez fait cela, les instructions suivantes s'exécuteront normalement.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Résultat :
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Obsolète ou non ?
Selon cet ancien article MSDN, SET SHOWPLAN_TEXT
est prévu pour être obsolète dans les futures versions de showplan, et il est recommandé d'utiliser SET SHOWPLAN_XML
à la place.
Cependant, cet article MSDN concerne SQL Server 2008 R2, et au moment où j'écris ceci, il ne semble pas avoir été obsolète dans SQL Server 2019. En fait, la documentation actuelle ne fait aucune mention de l'obsolescence, et elle n'est pas incluse. lorsque j'exécute une liste d'éléments obsolètes dans SQL Server.
Quoi qu'il en soit, il vaut probablement la peine de garder cela à l'esprit avant de l'utiliser dans les versions futures.
Plan d'exécution graphique
Si vous utilisez un outil graphique tel que SSMS ou Azure Data Studio, vous pouvez avoir la possibilité d'afficher le plan d'exécution de requête graphique estimé pour la requête actuelle.
- Dans SSMS, vous pouvez utiliser Ctrl + L pour faire ça. Ou vous pouvez cliquer sur Afficher le plan d'exécution estimé ou faites un clic droit dans la fenêtre de requête et sélectionnez Afficher le plan d'exécution estimé .
- Dans Azure Data Studio, vous pouvez cliquer sur Explain bouton au-dessus de la fenêtre de requête.
Vous pouvez également utiliser SET SHOWPLAN_XML ON
pour l'activer, et SET SHOWPLAN_XML OFF
pour le désactiver.