Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách SHOWPLAN_XML hoạt động trong SQL Server

Trong SQL Server, bạn có thể sử dụng SET SHOWPLAN_XML để trả về thông tin chi tiết về cách một câu lệnh T-SQL sẽ được thực thi, dưới dạng một tài liệu XML được xác định rõ.

Nó tương tự như SHOWPLAN_ALL , ngoại trừ SHOWPLAN_ALL trả về tập dữ liệu của nó gồm các hàng tạo thành cây phân cấp.

Bạn có thể đặt SHOWPLAN_XML thành ON hoặc OFF .

Khi SHOWPLAN_XML 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_XML ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Lưu ý rằng SET SHOWPLAN_XML 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ô.

Kết quả bạn nhận được có thể phụ thuộc vào công cụ bạn đang sử dụng để truy cập SQL Server.

Khi tôi chạy điều này trong Azure Data Studio, tôi có thể nhấp vào các tab khác nhau để xem kết quả khác.

Kết quả tab hiển thị chuỗi XML thô:

Nhấp vào hàng sẽ mở tài liệu XML trong một tab mới:

Kế hoạch truy vấn tab hiển thị biểu diễn đồ họa của kết quả:

Hoạt động hàng đầu tab trình bày dữ liệu ở định dạng bảng cho phép bạn sắp xếp dữ liệu theo các số liệu khác nhau:

Không hoạt động?

Nếu nó không hiệu quả với bạn, hãy đảm bảo Bao gồm kế hoạch thực thi thực tế không được chọn trong SSMS. Khi điều này được chọn, SET SHOWPLAN_XML ON không tạo ra đầu ra XML Showplan.

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_XML 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_XML OFF;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Kết quả:

Các lệnh
Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Kế hoạch thực thi trong GUIs

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 lối tắt để xem kế hoạch thực thi truy vấn đồ họa ước tính. Điều này cho phép bạn xem kế hoạch truy vấn mà không cần chạy SET SHOWPLAN_XML ON .

Để chạy một kế hoạch truy vấn ước tính:

  • 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 . Điều này sẽ giúp bạn không phải chuyển SHOWPLAN_XML bật và tắt trong mã của bạn.
  • 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ể chạy một kế hoạch truy vấn thực tế:

  • Trong SSMS, trên Truy vấn , nhấp vào Bao gồm kế hoạch thực thi thực tế hoặc nhấp vào Bao gồm kế hoạch thực thi thực tế nút thanh công cụ.
  • Trong Azure Data Studio, đi tới Xem> Bảng Lệnh và nhập Chạy truy vấn hiện tại với kế hoạch thực tế .

Lưu ý rằng nếu Bao gồm kế hoạch thực thi thực tế được chọn trong SSMS, SET SHOWPLAN_XML ON tùy chọn không tạo ra đầu ra XML Showplan. Thử xóa Bao gồm kế hoạch thực thi thực tế trước khi sử dụng SET này tùy chọn.

Tuy nhiên, tôi thấy Azure Data Studio làm ngược lại SHOWPLAN_XML ON dường như ghi đè Chạy truy vấn hiện tại với kế hoạch thực tế tùy chọn, ngoại trừ nếu tôi chạy Giải thích đầu tiên (kế hoạch truy vấn ước tính), sau đó Chạy truy vấn hiện tại với kế hoạch thực tế đột ngột hoạt động ( Hàng thực tế Các lần thực thi thực tế các cột của Hoạt động hàng đầu tab trả về dữ liệu thích hợp).

Có lẽ tốt nhất là tắt tùy chọn XML Showplan trước khi sử dụng các phương pháp khác để truy xuất kế hoạch truy vấn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt nhất cho khóa chính trong bảng là gì?

  2. Zero SQL bế tắc theo thiết kế - bất kỳ mẫu mã nào?

  3. Làm cách nào để kết nối với MS SQL Server bằng cách sử dụng Inno Setup?

  4. Sử dụng IDENT_CURRENT () để trả lại giá trị nhận dạng hiện tại trên cột nhận dạng trong SQL Server

  5. Làm thế nào để xử lý vệ sinh thoát khỏi các dấu ngoặc kép có thể bị đánh bại bởi SQL injection trong SQL Server?