1. Giới Thiệu
Trước khi bạn bắt đầu hành trình "rèn luyện" với các chỉ số kết hợp trong cơ sở dữ liệu Oracle, hãy chắc chắn rằng bạn hiểu một số khái niệm cơ bản. Đúng như việc chọn vũ khí cho một trận chiến, việc lựa chọn chỉ mục đúng sẽ giúp nâng cao hiệu suất của các truy vấn, còn nếu chọn sai, bạn có thể gây ra những hậu quả không mong muốn cho hệ thống của mình.
2. Tổng Quan Về Chỉ Số Kết Hợp
Khi một chỉ số chứa nhiều cột được đánh dấu, chúng ta gọi đó là chỉ số kết hợp hoặc chỉ số phức hợp. Oracle đã cải thiện khả năng xử lý các chỉ số kết hợp bằng cách giới thiệu truy cập chỉ mục skip-scan, cho phép trình tối ưu hóa có thêm nhiều tùy chọn khi thực hiện truy vấn. Tuy nhiên, cần chú ý đến thứ tự của các cột trong chỉ số. Thông thường, cột đầu tiên nên là cột có khả năng xuất hiện nhiều nhất trong các câu lệnh WHERE và có tính chọn lọc cao nhất.
Trước khi có chức năng skip-scan, chỉ số chỉ có thể được sử dụng nếu cột đầu tiên xuất hiện trong câu lệnh WHERE. Ví dụ, với bảng EMP có một chỉ số kết hợp dựa trên ba cột EMPNO, ENAME và DEPTNO, Oracle sẽ thường không sử dụng chỉ số này trừ khi câu lệnh WHERE chỉ định giá trị cho cột đầu tiên (EMPNO).
Nếu cột ENAME (cột thứ hai) không phải là cột đầu tiên, trình tối ưu hóa có thể quyết định không sử dụng chỉ số đó. Với chức năng skip-scan, trình tối ưu hóa có thể chọn sử dụng chỉ số ngay cả khi không có giá trị cho EMPNO. Các phương thức khác như fast full scan index hoặc quét toàn bộ bảng cũng có thể được sử dụng để cải thiện hiệu suất truy vấn.
Khi cột thứ ba trong chỉ số được sử dụng trong câu lệnh WHERE, trình tối ưu hóa cũng có thể thực hiện skip-scan, fast full scan index, hoặc quét toàn bộ bảng, nhờ đó tối ưu hóa hiệu suất tổng thể mà không cần thay đổi mã của người dùng. Trình tối ưu hóa tự động nhận thức về chỉ số và đưa ra quyết định dựa trên chi phí tính toán cho từng lựa chọn.
Cách Thức Hoạt Động của Chỉ Số
Trong một ví dụ cụ thể, khi chúng ta chỉ định điều kiện cho cột EMPNO trong câu lệnh WHERE, Oracle có thể tận dụng phần đầu của chỉ số. Nếu cả ENAME và EMPNO đều có trong điều kiện, toàn bộ chỉ số sẽ được sử dụng, dẫn đến hiệu suất tối ưu nhất. Thông thường, có hai loại quét index phổ biến: index unique scan và index range scan.
- Trong index unique scan, cơ sở dữ liệu nhận diện rằng chỉ số chứa danh sách các giá trị duy nhất.
- Trong index range scan, cơ sở dữ liệu trả về nhiều giá trị từ chỉ số dựa trên tiêu chí truy vấn.
Để tạo một unique index, bạn có thể sử dụng câu lệnh CREATE UNIQUE INDEX khi thiết lập chỉ số.
Khi bạn thiết lập khóa chính hoặc ràng buộc UNIQUE, Oracle sẽ tự động tạo một unique index cho các cột mà bạn chỉ định, trừ khi bạn tắt ràng buộc bằng mệnh đề DISABLE. Nếu bạn thiết lập khóa chính nhiều cột, Oracle cũng sẽ tạo một chỉ số kết hợp với các cột theo thứ tự mà bạn đã xác định.
Lưu Ý:
Tránh việc hard-code ROWID của Oracle trong mã của bạn. Cấu trúc ROWID có thể thay đổi qua các phiên bản và có thể thay đổi trong tương lai. Đó là lý do, tôi khuyên bạn không nên hard-code ROWID.
3. Kết Nối và Thảo Luận
Nếu bạn muốn trao đổi thêm về bài viết này, hãy kết nối với tôi qua LinkedIn và Facebook:
- LinkedIn: nguyentrungnam
- Facebook: trungnam.nguyen.395
Rất mong được kết nối và cùng thảo luận về các chủ đề liên quan đến chỉ số trong cơ sở dữ liệu Oracle!
source: viblo