1. Giới Thiệu
Histogram là một công cụ quan trọng trong Oracle Database, giúp hệ thống tối ưu hóa tìm kiếm và truy vấn dữ liệu. Bằng cách cung cấp cái nhìn chi tiết về cách dữ liệu được phân phối trong các cột, histogram cho phép trình tối ưu hóa chi phí (cost-based optimizer) của Oracle đưa ra các quyết định thông minh hơn, từ đó nâng cao hiệu suất của các truy vấn.
2. Nguyên Lý Hoạt Động Của Histogram
Khi chúng ta phân tích (analyze) một bảng hoặc chỉ mục (index), histogram ghi nhận sự phân bố của dữ liệu. Nhờ vào thông tin này, cost-based optimizer có thể quyết định khi nào nên sử dụng chỉ mục cho các điều kiện lọc mà nó biết sẽ trả về ít hàng, đồng thời bỏ qua chỉ mục cho những điều kiện có khả năng trả về nhiều hàng.
Tạo histogram giúp optimizer biết khi nào việc sử dụng chỉ mục là hợp lý, đặc biệt trong trường hợp dữ liệu bị lệch phân bố. Ví dụ, nếu hai giá trị chiếm phần lớn trong bảng, việc sử dụng chỉ mục có thể không hiệu quả. Việc xây dựng histogram sẽ cung cấp cho cost-based optimizer hình ảnh rõ ràng hơn về sự phân bố dữ liệu và cách tối ưu hóa để giảm thiểu thời gian truy vấn.
Khi xây dựng histogram, chúng ta cần chỉ định kích thước cụ thể, điều này liên quan đến số lượng bucket trong histogram. Mỗi bucket chứa thông tin về giá trị trong cột và số lượng hàng tương ứng.
Histogram trong Oracle thường được cân bằng theo chiều cao, nghĩa là mỗi bucket chứa một số lượng hàng giống nhau, trong khi histogram cân bằng theo chiều rộng sẽ xác định các giá trị phạm vi cho mỗi bucket, nhưng không phải là lựa chọn tối ưu.
3. Ví Dụ Minh Họa Thực Tế
Cột Dữ Liệu Phân Bổ Không Đồng Đều
Ví dụ, bảng ORDERS ghi nhận thông tin về đơn đặt hàng, ở đó cột ORDER_STATUS có thể mang giá trị "Delivered" chiếm tới 90% tổng số dữ liệu. Histogram sẽ giúp tối ưu hóa các truy vấn liên quan đến trạng thái đơn hàng này.
Truy Vấn Cột Có Giá Trị Thường Xuyên Lặp Lại
Trong bảng CUSTOMERS có cột REGION mà tại đó một số khu vực có số lượng khách hàng đông hơn hẳn, histogram sẽ cải thiện khả năng Oracle tối ưu hóa truy vấn. Nếu một khu vực chiếm 80% số lượng khách hàng, Oracle có thể lựa chọn một kế hoạch truy vấn khác phù hợp hơn, như dùng full table scan thay vì index scan.
Truy Vấn Với Các Cột Dữ Liệu Phân Bổ Đồng Đều
Nếu cột AGE trong bảng EMPLOYEES có độ tuổi phân bổ đồng đều, việc tạo histogram trên cột này sẽ không thực sự mang lại lợi ích rõ rệt về hiệu suất, do đó không cần thiết để xây dựng histogram.
Histogram Với Các Truy Vấn Nhiều Giá Trị DISTINCT
Trong trường hợp cột ZIP_CODE trong bảng ADDRESSES có nhiều giá trị khác nhau, nhưng một vài mã bưu điện chiếm tỉ lệ lớn hơn, histogram sẽ giúp Oracle hiểu rõ hơn về phân bố và từ đó đưa ra kế hoạch truy vấn hiệu quả hơn.
Lời Khuyên
Nếu bảng dữ liệu có sự phân bố không đồng đều, histograms sẽ cung cấp cái nhìn cân đối và hiệu chỉnh về phân bố dữ liệu. Ngược lại, nếu dữ liệu khá đồng đều, việc áp dụng histogram sẽ không mang lại lợi ích rõ rệt.
Theo mặc định, Oracle tạo ra 254 bucket trong một histogram, có thể điều chỉnh kích thước từ 1 đến 254 theo nhu cầu.
4. Kết Nối
Nếu bạn muốn trao đổi và thảo luận thêm về bài viết này, hãy kết nối với tôi qua LinkedIn và Facebook:
- LinkedIn: Nguyễn Trung Nam
- Facebook: Trung Nam Nguyễn
Mong rằng chúng ta có thể kết nối và cùng nhau chia sẻ kiến thức!
source: viblo