Trong SQL Server, bạn có thể sử dụng SET SHOWPLAN_TEXT
để trả về thông tin chi tiết về cách một câu lệnh T-SQL được thực thi.
SHOWPLAN_TEXT
trả về thông tin dưới dạng một tập hợp các hàng tạo thành cây phân cấp đại diện cho các bước được thực hiện bởi bộ xử lý truy vấn SQL Server khi nó thực thi mỗi câu lệnh.
Nó tương tự như SHOWPLAN_ALL
, ngoại trừ việc nó trả về ít chi tiết hơn. Do đó, nó nhắm đến các ứng dụng không thể xử lý các chi tiết bổ sung mà SHOWPLAN_ALL
cung cấp.
Bạn có thể đặt SHOWPLAN_TEXT
thành ON
hoặc OFF
.
Khi SHOWPLAN_TEXT
ON
, tất cả các câu lệnh T-SQL tiếp theo không được thực thi. Thay vào đó, SQL Server trả về thông tin thực thi cho câu lệnh (mà không thực thi nó).
Ví dụ
Đây là một ví dụ để chứng minh.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Lưu ý rằng SET SHOWPLAN_TEXT
không thể được chỉ định bên trong một thủ tục được lưu trữ và nó phải là câu lệnh duy nhất trong một lô.
Đây là kết quả trong Azure Data Studio:
Và đây là giao diện trong mssql-cli (giao diện dòng lệnh):
Các lệnhCommands 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.
Cách tắt tính năng này
Bạn có thể tắt nó bằng cách sử dụng SET SHOWPLAN_TEXT OFF
.
Sau khi bạn thực hiện xong việc này, các câu lệnh tiếp theo sẽ thực thi như bình thường.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Kết quả:
Các lệnhCommands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Không được dùng nữa hay Không?
Theo bài viết MSDN cũ này, SET SHOWPLAN_TEXT
đã được lên lịch để không dùng nữa trong các phiên bản showplan trong tương lai và bạn nên sử dụng SET SHOWPLAN_XML
thay vào đó.
Tuy nhiên, bài viết MSDN đó dành cho SQL Server 2008 R2 và khi tôi viết bài này, nó có vẻ như không được chấp nhận trong SQL Server 2019. Trên thực tế, tài liệu hiện tại không đề cập đến việc không dùng nữa và nó không được bao gồm khi tôi chạy danh sách các mục không dùng nữa trong SQL Server.
Dù bằng cách nào, nó có thể trả tiền để ghi nhớ điều này trước khi sử dụng nó trong các bản phát hành trong tương lai.
Kế hoạch thực thi đồ họa
Nếu đang sử dụng công cụ đồ họa như SSMS hoặc Azure Data Studio, bạn có thể có tùy chọn để xem kế hoạch thực thi truy vấn đồ họa ước tính cho truy vấn hiện tại.
- Trong SSMS, bạn có thể sử dụng Ctrl + L để làm điều này. Hoặc bạn có thể nhấp vào Hiển thị kế hoạch thực hiện ước tính hoặc nhấp chuột phải vào cửa sổ truy vấn và chọn Hiển thị kế hoạch thực hiện ước tính .
- Trong Azure Data Studio, bạn có thể nhấp vào nút Giải thích phía trên cửa sổ truy vấn.
Bạn cũng có thể sử dụng SET SHOWPLAN_XML ON
để kích hoạt nó và SET SHOWPLAN_XML OFF
để vô hiệu hóa nó.