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)