Các kiểu kết nối trong Oracle

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 28 - 30)

C. Hệ quản trị CSDL Oracle

4. Các kiểu kết nối trong Oracle

Do việc đảm bảo tính chuẩn hoá của dữ liệu mà các bảng sẽ đợc kết nối với nhau thông qua các khoá. Một trong các bớc tối u hoá là lựa chọn kiểu kết nối thích hợp. Trong Oracle có các kiểu kết nối sau:

4.1. Kết nối bằng Nested-Loop

Để thực hiện một kết nối theo kiểu Nested-Loop, Oracle sẽ chọn ra một bảng nh là bảng ngoài hay là bảng dẫn dắt (outer table hoặc driving table), bảng còn lại đợc gọi là bảng nội (inner table). Với mỗi hàng trong bảng ngoài thì Oracle sẽ tìm tất cả các hàng trong bảng nội thoả mãn điều kiện kết nối. Cặp hàng thoả mãn điều kiện kết nối sẽ đợc hợp lại thành một và thêm vào tập các hàng kết quả.

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã nesloop NhânViên (Full) (RowId)Phòng pk_phong (Range Scan) 4.2. Kết nối bằng sắp xếp trộn

Điều kiện có thể áp dụng đợc phơng pháp kết nối này là hai nguồn dữ liệu phải kết nối theo kiểu bằng chứ không thể là kiểu kết nối khác.

Oracle sẽ tiến hành sắp xếp mỗi nguồn dữ liệu theo cột đợc sử dụng trong điều kiện kết nối nếu nh nguồn dữ liệu cha đợc sắp xếp bởi thao tác trớc đó.

Oracle sẽ trộn hai nguồn dữ liệu bằng cách chọn ra các cặp hàng thoả mãn điều kiện kết nối và đa chúng vào tập các hàng kết quả.

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã

merge join

sort

(join) (join)sort

Phòng

(full) NhânViên(full)

4.3.Kết nối bằng Cluster

Oracle có thể thực hiện việc kết nối phân lớp với kết nối bằng mà giữa hai cột bảng nằm trong cùng một phân lớp. Trong một phân lớp thì các hàng từ hai bảng có cùng khoá phân lớp sẽ đợc nằm trong cùng một khối, do đó Oracle chỉ truy nhập đến các khối này.

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã nested loop

Phòng

(full) NhânViên(cluster)

4.3. Kết bằng sử dụng hàm băm

Oracle sẽ duyệt toàn bộ các bảng và chia (băm) chúng ra thành nhiều đoạn dựa vào bộ nhớ có sẵn.

Oracle xây dựng một bảng băm từ các đoạn này (nếu có thể Oracle sẽ chọn một đoạn đặt vừa vùng bộ nhớ có sẵn). Oracle sẽ sử dụng các đoạn tơng ứng trong một bảng khác để khảo sát bảng băm. Các đoạn khác mà không nằm vừa trong bộ nhớ sẽ đợc đặt trên đĩa.

Ví dụ: SELECT * FROM NhânViên, Phòng WHERE NhânViên.M Phòng=Phòng.M Phòng;ã ã hash join

Phòng

(full) NhânViên(cluster)

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 28 - 30)

Tải bản đầy đủ (DOC)

(96 trang)
w