Di SQL Server, Anda dapat menggunakan SET SHOWPLAN_TEXT
pernyataan untuk mengembalikan informasi rinci tentang bagaimana pernyataan T-SQL dijalankan.
SHOWPLAN_TEXT
mengembalikan informasi sebagai sekumpulan baris yang membentuk pohon hierarki yang mewakili langkah-langkah yang diambil oleh prosesor kueri SQL Server saat mengeksekusi setiap pernyataan.
Ini mirip dengan SHOWPLAN_ALL
, kecuali bahwa ia mengembalikan lebih sedikit detail. Oleh karena itu, ini ditujukan untuk aplikasi yang tidak dapat menangani detail tambahan yang SHOWPLAN_ALL
menyediakan.
Anda dapat mengatur SHOWPLAN_TEXT
ke salah satu ON
atau OFF
.
Saat SHOWPLAN_TEXT
adalah ON
, semua pernyataan T-SQL berikutnya tidak dieksekusi. Sebaliknya SQL Server mengembalikan informasi eksekusi untuk pernyataan (tanpa menjalankannya).
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Perhatikan bahwa SET SHOWPLAN_TEXT
tidak dapat ditentukan di dalam prosedur tersimpan, dan itu harus menjadi satu-satunya pernyataan dalam sebuah batch.
Seperti inilah hasilnya di Azure Data Studio:
Dan inilah tampilannya di mssql-cli (antarmuka baris perintah):
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.
Cara Mematikannya
Anda dapat mematikannya dengan menggunakan SET SHOWPLAN_TEXT OFF
.
Setelah Anda melakukannya, pernyataan berikutnya akan dijalankan seperti biasa.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Hasil:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Usang atau Tidak?
Menurut artikel MSDN lama ini, SET SHOWPLAN_TEXT
dijadwalkan untuk dihentikan di versi showplan mendatang, dan disarankan agar Anda menggunakan SET SHOWPLAN_XML
sebagai gantinya.
Namun, artikel MSDN itu untuk SQL Server 2008 R2, dan saat saya menulis ini, artikel tersebut tampaknya tidak ditinggalkan di SQL Server 2019. Faktanya, dokumentasi saat ini tidak menyebutkan penghentian, dan tidak disertakan ketika saya menjalankan daftar item yang tidak digunakan lagi di SQL Server.
Bagaimanapun, mungkin ada baiknya untuk mengingat hal ini sebelum menggunakannya di rilis mendatang.
Rencana Eksekusi Grafis
Jika Anda menggunakan alat grafis seperti SSMS atau Azure Data Studio, Anda mungkin memiliki opsi untuk melihat perkiraan rencana eksekusi kueri grafis untuk kueri saat ini.
- Dalam SSMS Anda dapat menggunakan Ctrl + L untuk melakukan ini. Atau Anda dapat mengeklik Tampilkan Perkiraan Rencana Eksekusi ikon, atau klik kanan di jendela kueri dan pilih Tampilkan Perkiraan Rencana Eksekusi .
- Di Azure Data Studio, Anda dapat mengklik tombol Jelaskan tombol di atas jendela kueri.
Anda juga dapat menggunakan SET SHOWPLAN_XML ON
untuk mengaktifkannya, dan SET SHOWPLAN_XML OFF
untuk menonaktifkannya.