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

Oracle:Thứ tự cột có quan trọng trong một chỉ mục không?

  1. Nếu ab cả hai đều có 1000 giá trị khác nhau và chúng luôn được truy vấn cùng nhau, sau đó thứ tự của các cột trong chỉ mục không thực sự quan trọng. Nhưng nếu a chỉ có 10 giá trị khác biệt hoặc bạn có các truy vấn chỉ sử dụng một trong các cột thì điều đó thực sự quan trọng; trong những trường hợp này, chỉ mục có thể không được sử dụng nếu thứ tự cột không phù hợp với truy vấn.
  2. Cột có các giá trị khác biệt ít nhất phải đứng đầu và cột có các giá trị khác biệt nhất sau cùng. Điều này không chỉ tối đa hóa tiện ích của chỉ mục mà còn làm tăng lợi nhuận tiềm năng từ việc nén chỉ mục.
  3. Kiểu dữ liệu và độ dài của cột có tác động đến lợi nhuận mà chúng ta có thể nhận được từ việc nén chỉ mục nhưng không ảnh hưởng đến thứ tự tốt nhất của các cột trong chỉ mục.
  4. Sắp xếp các cột với cột ít chọn lọc nhất đầu tiên và cột chọn lọc cuối cùng. Trong trường hợp dây buộc buộc với cột có nhiều khả năng được sử dụng riêng.

Một ngoại lệ tiềm năng cho 2. và 3. là với các cột DATE. Vì các cột Oracle DATE bao gồm yếu tố thời gian nên chúng có thể có 86400 giá trị khác biệt mỗi ngày . Tuy nhiên, hầu hết các truy vấn trên cột dữ liệu thường chỉ quan tâm đến yếu tố ngày, vì vậy bạn có thể chỉ muốn xem xét số ngày riêng biệt trong tính toán của mình. Mặc dù tôi nghi ngờ nó sẽ không ảnh hưởng đến tính chọn lọc tương đối trong một số ít trường hợp.

chỉnh sửa (theo nhận xét của Nick Pierpoint)

Hai lý do chính để dẫn đầu với cột ít chọn lọc nhất là

  1. Nén chỉ mục
  2. Số lần đọc Bỏ qua Chỉ mục

Cả hai điều này đều hoạt động kỳ diệu khi biết rằng giá trị trong vị trí hiện tại giống với giá trị trong vị trí trước đó. Do đó, chúng ta có thể tối đa hóa lợi nhuận từ các kỹ thuật này bằng cách giảm thiểu số lần giá trị thay đổi. Trong ví dụ sau, A có bốn giá trị riêng biệt và B có sáu. Các dittos đại diện cho một giá trị có thể nén hoặc một khối chỉ mục có thể bỏ qua.

Least selective column leads ...

A          B
---------  -
AARDVARK   1
"          2
"          3
"          4
"          5
"          6
DIFFVAL    1
"          2
"          3
"          4
"          5
"          6
OTHERVAL   1
"          2
"          3
"          4
"          5
"          6
WHATEVER   1
"          2
"          3
"          4
"          5
"          6

Hầu hết các dẫn cột chọn lọc ...

B  A
-  --------
1  AARDVARK
"  DIFFVAL
"  OTHERVAL
"  WHATEVER
2  AARDVARK
"  DIFFVAL
"  OTHERVAL
"  WHATEVER
3  AARDVARK
"  DIFFVAL
"  OTHERVAL
"  WHATEVER
4  AARDVARK
"  DIFFVAL
"  OTHERVAL
"  WHATEVER
5  AARDVARK
"  DIFFVAL
"  OTHERVAL
"  WHATEVER
6  AARDVARK
"  DIFFVAL
"  OTHERVAL
"  WHATEVER

Ngay cả trong ví dụ trival này, (A, B) có 20 vị trí có thể bỏ qua so với 18 vị trí của (B, A) . Sự chênh lệch lớn hơn sẽ tạo ra ROI lớn hơn khi nén chỉ mục hoặc tiện ích tốt hơn từ các lần đọc Bỏ qua chỉ mục.

Như trường hợp của hầu hết các điều chỉnh heuristics, chúng tôi cần phải chuẩn bằng cách sử dụng các giá trị thực tế và khối lượng thực tế. Đây chắc chắn là một tình huống mà sự lệch dữ liệu có thể có tác động đáng kể đến hiệu quả của các phương pháp tiếp cận khác nhau.

"Tôi nghĩ nếu bạn có chỉ số đầu tiên có tính chọn lọc cao thì - từ quan điểm hiệu suất - bạn sẽ làm tốt việc đặt nó lên đầu tiên."

Nếu chúng ta có một cột có tính chọn lọc cao thì chúng ta nên tạo cho nó một chỉ mục của riêng nó. Các lợi ích bổ sung của việc tránh thao tác LỌC trên một số ít hàng khó có thể bị ảnh hưởng bởi chi phí duy trì một chỉ mục tổng hợp.

Chỉ mục nhiều cột hữu ích nhất khi chúng ta có:

  • hai hoặc nhiều cột có mức độ chọn lọc vừa phải,
  • thường được sử dụng trong cùng một truy vấn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để nâng cao ngoại lệ trong PL / SQL?

  2. Hàm INITCAP () trong Oracle

  3. ORA-00900:câu lệnh SQL không hợp lệ- khi chạy một thủ tục trong oracle 10g

  4. Làm cách nào để tạo id với AUTO_INCREMENT trên Oracle?

  5. Đẩy con trỏ đơn