Ai đó có thể vui lòng giải thích một chút về kế hoạch giải thích không và làm thế nào để có được kế hoạch giải thích cho một truy vấn. Ngoài ra, nếu có bất kỳ tập lệnh sql nào có thể được sử dụng làm tiện ích cho việc này, điều đó sẽ rất tuyệt.
Ai đó có thể vui lòng giải thích một chút về kế hoạch giải thích không và làm thế nào để có được kế hoạch giải thích cho một truy vấn. Ngoài ra, nếu có bất kỳ tập lệnh sql nào có thể được sử dụng làm tiện ích cho việc này, điều đó sẽ rất tuyệt.
Câu trả lời:
Bạn có thể sử dụng gói DBMS_XPLAN :
SQL> explain plan for select * from dual;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 |
| 1 | TABLE ACCESS FULL | DUAL | 1 | 2 | 2 |
--------------------------------------------------------------------
Note: cpu costing is off
Câu lệnh EXPLAIN PLAN hiển thị các kế hoạch thực hiện được chọn bởi trình tối ưu hóa cho các câu lệnh CHỌN, CẬP NHẬT, XÁC NHẬN và XÓA. Kế hoạch thực hiện câu lệnh là chuỗi các hoạt động mà cơ sở dữ liệu thực hiện để chạy câu lệnh.
EXPLAIN PLAN FOR ...
Thay thế ... bằng Câu lệnh SQL của bạn. Sau khi chạy này chạy như sau để xem kế hoạch:
SELECT * FROM table(dbms_xplan.display);
Để biết thêm thông tin, hãy xem phần Tổng quan hoặc Sử dụng trong Hướng dẫn điều chỉnh hiệu suất Oracle 11g.
Đây là một câu hỏi rất phổ biến, vì vậy tôi quyết định biến câu trả lời này thành một bài viết .
Kế hoạch thực hiện ước tính được tạo bởi Trình tối ưu hóa mà không thực hiện truy vấn SQL. Bạn có thể tạo kế hoạch thực hiện ước tính từ bất kỳ máy khách SQL nào bằng cách sử dụng EXPLAIN PLAN FOR hoặc bạn có thể sử dụng Oracle SQL Developer cho nhiệm vụ này.
Khi sử dụng Oracle, nếu bạn thêm EXPLAIN PLAN FOR
lệnh vào một truy vấn SQL đã cho, cơ sở dữ liệu sẽ lưu trữ kế hoạch thực hiện ước tính trong liên kết PLAN_TABLE
:
EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Để xem kế hoạch thực hiện ước tính, bạn cần sử dụng DBMS_XPLAN.DISPLAY
, như được minh họa trong ví dụ sau:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))
Tùy chọn định dạng ALL + OUTLINE cho phép bạn biết thêm chi tiết về kế hoạch thực hiện ước tính hơn là sử dụng tùy chọn định dạng mặc định.
Nếu bạn đã cài đặt SQL Developer, bạn có thể dễ dàng nhận được kế hoạch thực hiện ước tính cho bất kỳ truy vấn SQL nào mà không cần phải thêm lệnh EXPLAIN PLAN FOR:
Kế hoạch thực thi SQL thực tế được Trình tối ưu hóa tạo ra khi chạy truy vấn SQL. Vì vậy, không giống như Kế hoạch thực hiện ước tính, bạn cần thực hiện truy vấn SQL để có được kế hoạch thực hiện thực tế của nó.
Kế hoạch thực tế không nên khác biệt đáng kể so với kế hoạch ước tính, miễn là số liệu thống kê bảng đã được thu thập đúng cách bởi cơ sở dữ liệu quan hệ cơ bản.
Để hướng dẫn Oracle lưu trữ kế hoạch thực hiện thực tế cho một truy vấn SQL đã cho, bạn có thể sử dụng GATHER_PLAN_STATISTICS
gợi ý truy vấn:
SELECT /*+ GATHER_PLAN_STATISTICS */
p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Để hình dung kế hoạch thực hiện thực tế, bạn có thể sử dụng DBMS_XPLAN.DISPLAY_CURSOR
:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))
Nếu bạn muốn nhận các kế hoạch thực hiện cho tất cả các truy vấn được tạo trong một phiên nhất định, bạn có thể đặt STATISTICS_LEVEL
cấu hình phiên thành TẤT CẢ:
ALTER SESSION SET STATISTICS_LEVEL='ALL'
Điều này sẽ có tác dụng tương tự như đặt GATHER_PLAN_STATISTICS
gợi ý truy vấn trên mỗi truy vấn thực hiện. Vì vậy, giống như với GATHER_PLAN_STATISTICS
gợi ý truy vấn, bạn có thể sử dụng DBMS_XPLAN.DISPLAY_CURSOR
để xem kế hoạch thực hiện thực tế.
Bạn nên đặt lại
STATISTICS_LEVEL
cài đặt về chế độ mặc định sau khi hoàn tất việc thu thập các kế hoạch thực hiện mà bạn quan tâm. Điều này rất quan trọng, đặc biệt nếu bạn đang sử dụng nhóm kết nối và kết nối cơ sở dữ liệu được sử dụng lại.ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'