Tài liệu Oracle có một loạt các cân nhắc tuyệt vời cho các lựa chọn lập chỉ mục:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004
Cập nhật cho 19c:https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/designs-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D
Trích dẫn:
-
Xem xét các khóa lập chỉ mục thường được sử dụng trong mệnh đề WHERE.
-
Xem xét các khóa lập chỉ mục được sử dụng thường xuyên để nối các bảng trong câu lệnh SQL. Để biết thêm thông tin về cách tối ưu hóa liên kết, hãy xem phần "Sử dụng Hash Clusters cho Hiệu suất".
-
Chọn các khóa chỉ mục có tính chọn lọc cao. Độ chọn lọc của một chỉ mục là phần trăm các hàng trong bảng có cùng giá trị cho khóa được lập chỉ mục. Tính chọn lọc của chỉ mục là tối ưu nếu một số hàng có cùng giá trị. Lưu ý:Oracle tự động tạo các chỉ mục hoặc sử dụng các chỉ mục hiện có trên các khóa và biểu thức của khóa chính và duy nhất mà bạn xác định với các ràng buộc toàn vẹn. ít thường xuyên hơn các giá trị khác.
-
Không sử dụng chỉ mục cây B tiêu chuẩn trên các khóa hoặc biểu thức có ít giá trị khác biệt. Các khóa hoặc biểu thức như vậy thường có tính chọn lọc kém và do đó không tối ưu hóa hiệu suất trừ khi các giá trị khóa được chọn thường xuyên xuất hiện ít thường xuyên hơn các giá trị khóa khác. Bạn có thể sử dụng chỉ mục bitmap một cách hiệu quả trong những trường hợp như vậy, trừ khi chỉ mục được sửa đổi thường xuyên, như trong ứng dụng OLTP có tính đồng thời cao.
-
Không lập chỉ mục các cột được sửa đổi thường xuyên. Các câu lệnh UPDATE sửa đổi các cột được lập chỉ mục và các câu lệnh INSERT và DELETE sửa đổi các bảng được lập chỉ mục mất nhiều thời gian hơn nếu không có chỉ mục. Các câu lệnh SQL như vậy phải sửa đổi dữ liệu trong chỉ mục cũng như dữ liệu trong bảng. Chúng cũng tạo ra các hoàn tác và làm lại bổ sung.
-
Không lập chỉ mục các khóa chỉ xuất hiện trong mệnh đề WHERE với các hàm hoặc toán tử. Mệnh đề WHERE sử dụng một hàm, không phải MIN hoặc MAX hoặc toán tử có khóa được lập chỉ mục sẽ không cung cấp đường dẫn truy cập sử dụng chỉ mục ngoại trừ các chỉ mục dựa trên hàm.
-
Xem xét việc lập chỉ mục các khóa ngoại của các ràng buộc toàn vẹn tham chiếu trong trường hợp một số lượng lớn các câu lệnh INSERT, UPDATE và DELETE đồng thời truy cập vào bảng cha và con. Chỉ mục như vậy cho phép CẬP NHẬT và XÓA trên bảng mẹ mà không cần chia sẻ khóa bảng con.
-
Khi chọn lập chỉ mục một khóa, hãy cân nhắc xem liệu hiệu suất đạt được cho các truy vấn có đáng để giảm hiệu suất đối với INSERT, UPDATE và DELETE và việc sử dụng không gian cần thiết để lưu chỉ mục hay không. Bạn có thể muốn thử nghiệm bằng cách so sánh thời gian xử lý của các câu lệnh SQL có và không có chỉ mục. Bạn có thể đo thời gian xử lý bằng cơ sở theo dõi SQL.