Phân tích cách thi hành câu lệnh SQL

Một phần của tài liệu Phân tích và tối ưu hóa câu lệnh SQL (Trang 40 - 42)

C. Hệ quản trị CSDL Oracle

B.Phân tích cách thi hành câu lệnh SQL

Khi Server nhận đợc câu lệnh SQL từ Client gửi tới thì Server sẽ tiến hành phân tích câu lệnh theo dạng cây do đó số tổ hợp có thể khá lớn. Tại Oracle Server có một vùng nhớ để lu trữ các câu lệnh SQL đã phân tích để khi gặp lại câu lệnh thì không phải thực hiện quá trình phân tích nữa. Do làm việc trong môi trờng đa ngời dùng nên khả năng gặp lại các câu lệnh SQL là rất lớn và có thể nhận thấy rằng bộ đệm lu trữ càng lớn thì xác suất tìm thấy câu lệnh trong bộ đệm là càng cao. Tuy nhiên kích thớc của bộ đệm cũng không thể lớn quá phần bộ nhớ RAM vật lý còn rảnh vì nếu vợt quá sẽ gây ra việc tráo đổi bộ nhớ ra đĩa, đây là hiệu ứng không mong muốn vì nó sẽ làm chậm tốc độ thực hiện chơng trình.

Phân tích cách thực hiện một câu lệnh SQL cụ thể và xây dựng cây phân tích. Giả sử có các bảng NhânViên chứa các thông tin về NhânViên nh Lơng, Nghề, Tên, MãPhòng ...v.v và bảng Phòng chứa MãPhòng và TênPhòng để liên kết với bảng NhânViên.

Giả sử có câu lệnh SQL sau:

SELECT TênNhânViên, Nghề, Lơng, TênPhòng FROM NhânViên, Phòng

WHERE NhânViên.m Phòng = Phòng.M Phòng AND NOT EXITSTS ( SELECT * FROM BậcLã ã ơng WHERE NhânViên.Lơng BETWEEN Bậc1 AND Bậc2);

Do MãPhòng là khoá chính nên các hàng trong bảng Phòng sẽ đợc truy nhập

bằng ROWID còn bảng nhân viên do không có Index trên TênNhânViên nên bảng

Truy nhập bảng (Duyệt toàn bộ) NhânViên 3 Truy nhập Index (Khóa duy nhất) pk_maphong 5

Sơ đồ cách thực hiện câu lệnh SQL trong ORACLE

Truy nhập bảng (Bằng ROWID) Phòng 4 Bộ lọc 1 Nested-loop 2 Truy nhập bảng (Duyệt toàn bộ) BậcLương 6

Trong sơ đồ này thì mỗi khối ứng với một bớc thực hiện và con số trong khối chỉ thứ tự đợc thực hiện của khỗi. Mỗi khối sẽ lấy dữ liệu từ khối khác (màu trắng) hoặc trực tiếp từ dữ liệu trên đĩa (màu đen). Sau khi dữ liệu đợc xử lý ở mỗi khối thì sẽ trả lại một tập hợp các hàng (đợc gọi là nguồn dữ liệu Row Source) cho khối ở mức trên và nếu là khối trên cùng thì sẽ trả lại cho ngời dùng hoặc chơng trình thực hiện câu lệnh.

Theo sơ đồ trên, Oracle sẽ thực hiện bớc 3 và trả lại từng dòng một cho bớc 2. Tơng ứng với mỗi dòng ở bớc 3 Oracle thực hiện các công việc sau:

- Oracle thực hiện bớc 5 và trả lại ROWID cho bớc 4. - Oracle thực hiện bớc 4 trả lại giá trị hàng cho bớc 2.

- Oracle thực hiện bớc 2 bằng cách lấy mỗi hàng ở bớc 3 và một hàng ở bớc 4 ghép thành một và trả lại kết quả cho bớc 1.

- Oracle sẽ thực hiện bớc 6 và sẽ trả lại các hàng cho bớc 1 nếu có.

- Để thực hiện bớc 1, Oracle sẽ kiểm tra ở bớc 6 có trả lại hàng nào không, nếu có thì Oracle sẽ trả lại hàng từ bớc 2 cho ngời dùng.

Chú ý rằng ứng với mỗi hàng trả lại ở bớc 3 thì Oracle sẽ phải một lần thực hiện bớc 5, 4, 2, 6, 1. Với các bớc mà chỉ đòi hỏi một dòng từ các nhánh con trong cây phân tích thì rất tốt bởi vì Oracle có thể tiến hành thực hiện bớc đó ngay và nh vậy cây lệnh sẽ đợc thu gọn lại từng thời điểm. Nói chung thì các bớc chỉ yêu cầu truy nhập một hàng từ bảng là truy nhập duy nhất trực tiếp từ bảng, từ Index, từ kết nối Nested-Loop và từ bộ lọc còn các bớc yêu cầu tất cả các hàng hàng đồng thời là sắp xếp, kết nối bằng sắp xếp trộn, các hàm làm việc với nhóm hàng và phép hợp các tập hợp.

Dựa trên cây phân tích lệnh có thể đánh giá hoặc sắp xếp lại câu lệnh để chọn ra cách thức thực hiện tối u. Ngoài ra cũng có thể chuyển cây phân tích này các chú giải nh sau:

STT (ID) Thao tác (Operation) Tuỳ chọn (Option) Đối tợng tác động (Object-name)

0 Lệnh SELECT

1 Bộ lọc

2 Nested-Loop

3 Truy nhập bảng Duyệt toàn bộ NhânViên

4 Truy nhập bảng Bằng ROWID Phòng

5 Truy nhập bảng Bằng khoá duy nhất PK_MAPHONG

6 Truy nhập bảng Bằng duyệt toàn bộ BậcLơng

Các chú giải này có thể đợc liệt kê ra bởi Oracle bằng cách sử dụng lệnh EXPLAIN PLAN để mỗi khi thực hiện câu lệnh thì Oracle sẽ đa ra các chú giải về cây phân tích đợc thực hiện.

Một phần của tài liệu Phân tích và tối ưu hóa câu lệnh SQL (Trang 40 - 42)