In SQL Server kunt u de SET SHOWPLAN_TEXT
statement om gedetailleerde informatie te retourneren over hoe een T-SQL-statement wordt uitgevoerd.
SHOWPLAN_TEXT
retourneert informatie als een set rijen die een hiërarchische boomstructuur vormen die de stappen vertegenwoordigt die worden genomen door de SQL Server-queryprocessor terwijl deze elke instructie uitvoert.
Het lijkt op SHOWPLAN_ALL
, behalve dat het minder details retourneert. Het is daarom gericht op toepassingen die niet kunnen omgaan met de extra details die SHOWPLAN_ALL
biedt.
U kunt SHOWPLAN_TEXT
. instellen naar ofwel ON
of OFF
.
Wanneer SHOWPLAN_TEXT
is ON
, worden alle volgende T-SQL-instructies niet uitgevoerd. In plaats daarvan retourneert SQL Server uitvoeringsinformatie voor de instructie (zonder deze uit te voeren).
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Merk op dat SET SHOWPLAN_TEXT
kan niet worden opgegeven in een opgeslagen procedure en moet de enige instructie in een batch zijn.
Zo ziet het resultaat eruit in Azure Data Studio:
En zo ziet het eruit in mssql-cli (opdrachtregelinterface):
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.
Hoe het uit te schakelen
Je kunt het uitschakelen met SET SHOWPLAN_TEXT OFF
.
Zodra je dit hebt gedaan, worden de volgende instructies normaal uitgevoerd.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Resultaat:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Verouderd of niet?
Volgens dit oude MSDN-artikel, SET SHOWPLAN_TEXT
is gepland voor beëindiging in toekomstige showplan-versies, en het wordt aanbevolen dat u SET SHOWPLAN_XML
gebruikt in plaats daarvan.
Dat MSDN-artikel is echter voor SQL Server 2008 R2 en terwijl ik dit schrijf, lijkt het niet te zijn verouderd in SQL Server 2019. In de huidige documentatie wordt zelfs geen melding gemaakt van beëindiging en het is niet inbegrepen wanneer ik een lijst met verouderde items in SQL Server uitvoer.
Hoe dan ook, het loont waarschijnlijk de moeite om hier rekening mee te houden voordat u het in toekomstige releases gebruikt.
Grafisch uitvoeringsplan
Als u een grafisch hulpprogramma gebruikt, zoals SSMS of Azure Data Studio, heeft u mogelijk de mogelijkheid om het geschatte grafische uitvoeringsplan voor de query voor de huidige query te bekijken.
- In SSMS kun je Ctrl + L . gebruiken om dit te doen. Of u kunt klikken op Geschat uitvoeringsplan weergeven of klik met de rechtermuisknop in het queryvenster en selecteer Geschat uitvoeringsplan weergeven .
- In Azure Data Studio kunt u klikken op de Uitleggen knop boven het vraagvenster.
U kunt ook SET SHOWPLAN_XML ON
. gebruiken om het in te schakelen, en SET SHOWPLAN_XML OFF
om het uit te schakelen.