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

Tham gia băm trong Oracle với ví dụ

Mục lục

Tham gia băm trong Oracle là gì?

Các phép nối băm được sử dụng khi việc nối các bảng lớn hoặc khi phép nối yêu cầu hầu hết các hàng của bảng đã nối. Điều này chỉ được sử dụng cho các phép nối bình đẳng

Thuật toán cho phép tham gia băm Oracle

1) Trình tối ưu hóa sử dụng bảng nhỏ hơn trong số 2 bảng để tạo bảng băm trong bộ nhớ. Bảng nhỏ được gọi là bảng xây dựng

Giai đoạn xây dựng

Đối với mỗi hàng trong vòng lặp bảng nhỏ
Tính toán giá trị băm trên khóa tham gia
Chèn hàng trong nhóm băm thích hợp.
Vòng lặp kết thúc;

2) sau đó quét các bảng lớn và so sánh giá trị băm (của các hàng từ bảng lớn) với bảng băm này để tìm các hàng được nối. Bảng lớn được gọi là bảng thăm dò

Giai đoạn thăm dò

Đối với mỗi hàng trong vòng lặp bảng lớn
Tính giá trị băm trên khóa tham gia
Thăm dò bảng băm để tìm giá trị băm
Nếu tìm thấy khớp
Trả về các hàng
Kết thúc vòng lặp;

Giải thích ở trên là đúng khi bảng băm đang được phát triển hoàn toàn phù hợp với bộ nhớ. Nếu bảng băm quá lớn để vừa với bộ nhớ khả dụng, thì Oracle thực hiện xử lý theo cách thức khác một chút.
Về cơ bản, nếu bảng băm là quá lớn để phù hợp với bộ nhớ có sẵn Oracle có cơ chế để lưu nó vào đĩa theo lô (được gọi là phân vùng) và lưu bảng thăm dò vào đĩa theo các lô phù hợp, sau đó thực hiện phần nối khôn ngoan giữa các lô phù hợp

Về cơ bản khi vùng băm lấp đầy, Oracle sẽ yêu cầu sử dụng không gian bảng TEMP. Oracle sẽ chọn phân vùng lớn nhất có trong bảng băm và ghi nó vào TEMP. Oracle giữ một chỉ mục giống như bitmap của toàn bộ bảng băm trong bộ nhớ. Chỉ mục này chỉ biết rằng đối với một nhóm băm nhất định (vị trí trong bảng băm) có hoặc không có giá trị. Nhưng chỉ mục không có giá trị thực.

Do đó, nếu một hàng từ bảng thứ hai hoặc bảng thăm dò băm đến một trong những vị trí này, điều duy nhất được biết là có khả năng khớp. Quá trình xây dựng bảng băm tiếp tục cho đến khi toàn bộ bảng băm hoàn thành. nằm trong bộ nhớ và một phần nằm trên Đĩa

Bây giờ Oracle bắt đầu đọc thăm dò hoặc bảng khác và bắt đầu tạo hàm băm của khóa nối. Nếu khóa băm khớp với hàm băm trong bộ nhớ thì quá trình nối kết thúc và hàng được trả về. sẽ lưu trữ hàng này trên không gian bảng TEMP trong cùng một lược đồ phân vùng như dữ liệu hàng đầu tiên được lưu giữ.

Khi quá trình chuyển đầu tiên của toàn bộ bảng phụ được thực hiện và tất cả các hàng trong bảng băm trong bộ nhớ được cung cấp, Oracle sẽ bắt đầu xem xét phân vùng phù hợp trong đĩa và nó sẽ xử lý từng phân vùng một và đọc các hàng trong bộ nhớ. và xử lý đầu ra

Tham gia băm Oracle Ví dụ:

 select / * + use_hash (a b) * / a.emp_no, b.dept_no, b.dept_name from emp a, dept b where a.dept_no =b.dept_no; Plan ---------- --------------------------------------- CHỌN STATEMENTHASH LIÊN TỤC TRUY CẬP ĐẦY ĐỦ TRUY CẬP CÓ THỂ CHẤP NHẬN ĐẦY ĐỦ TRUY CẬP ĐẦY ĐỦ  

Cách xử lý Hash tham gia trong Oracle
1) Bảng EMP đầu tiên được quét và băm
2) bảng ghi nợ được quét cho từng hàng và mã băm được tạo cho tham gia giữ dept_no
3) băm dept_no được khớp trong bảng băm , nếu tìm thấy một kết quả phù hợp, các hàng đã nối sẽ được trả về

gợi ý tham gia băm oracle

Oracle đã cung cấp gợi ý use_hash để buộc sử dụng phép nối băm.

 Usageselect / * + use_hash (bí danh bảng) * / ...... 

Điều này cho trình tối ưu hóa biết rằng phương thức nối sẽ được sử dụng khi “table_alias” là nguồn hàng tiếp theo trong thứ tự nối phải là một phép nối băm; tuy nhiên nó không cho trình tối ưu hóa biết liệu nguồn hàng đó nên được sử dụng làm bảng xây dựng hay bảng thăm dò.

Để chỉ định cách nguồn hàng được sử dụng, bạn cần gợi ý thứ hai:no_swap_join_inputs (“table_alias”) nếu bạn muốn Oracle sử dụng nguồn hàng làm bảng thăm dò hoặc swap_join_inputs (“table_alias”) nếu bạn muốn Oracle sử dụng nó làm bản dựng bảng

Một số điểm quan trọng về tham gia băm trong Oracle

1) Đầu ra của kết quả tham gia băm không phải là ngay lập tức vì tham gia băm bị chặn khi xây dựng bảng băm. , vì nó hoạt động trên mô hình hiển thị kết quả sau khi tất cả các hàng của ít nhất một trong các bảng được băm trong bảng băm.
3) Bảng băm là bộ nhớ riêng nên việc truy cập dữ liệu không phải chịu nhiều hoạt động chốt

Chi phí tham gia băm =Chi phí đọc bảng A + chi phí đọc bảng B + một số xử lý nhỏ trong bộ nhớ

Sự khác biệt giữa Vòng lặp lồng nhau và Tham gia băm

Tham gia băm Tham gia lồng nhau
Các phép nối băm được sử dụng khi việc nối các bảng lớn hoặc khi phép nối yêu cầu hầu hết các hàng của bảng đã nối. Điều này chỉ được sử dụng cho các phép nối bình đẳng Kết hợp NESTED LOOPS là thao tác kết hợp chọn một hàng từ nguồn hàng bắt đầu đã chọn và sử dụng các giá trị của nguồn hàng này để chuyển vào hoặc chọn từ nguồn hàng đã kết hợp để tìm kiếm hàng phù hợp.
-Tốt nhất cho các giao dịch loại OLTP
Thao tác băm thường hiệu quả đối với hai tập dữ liệu khi trả về nhiều bản ghi. Khi một tập dữ liệu không có hoặc số lượng nhỏ o bản ghi được trả về và tập dữ liệu khác có thể được đối sánh bằng thao tác lập chỉ mục, thì phép nối vòng lặp lồng nhau sẽ hiệu quả hơn
Bạn có thể thấy nhiều liên kết băm hơn được sử dụng với chế độ trình tối ưu hóa ALL_ROWS, vì nó hoạt động trên mô hình hiển thị kết quả sau khi tất cả các hàng của ít nhất một trong các bảng được băm trong bảng băm. Bạn sẽ thấy nhiều hơn việc sử dụng vòng lặp lồng nhau khi sử dụng chế độ trình tối ưu hóa FIRST_ROWS vì nó hoạt động trên mô hình hiển thị kết quả tức thời cho người dùng khi chúng được tải xuống. Không cần chọn bất kỳ dữ liệu nào vào bộ nhớ đệm trước khi nó được trả lại cho người dùng. Trong trường hợp tham gia băm, nó là cần thiết và được giải thích bên dưới.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql tĩnh so với động

  2. Làm thế nào để cấu hình bộ ký tự UTF8 trong Oracle?

  3. Chèn một hình ảnh từ Oracle vào SQL Server

  4. Cập nhật bản vá quan trọng của Oracle - tháng 10 năm 2020

  5. Cách thay đổi ngôn ngữ cho phiên Oracle của bạn