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

Oracle 10g - tối ưu hóa KHI KHÔNG ĐẦY ĐỦ

Trình tối ưu hóa nghĩ rằng việc quét toàn bộ bảng sẽ tốt hơn.

Nếu chỉ có một vài NULL hàng, trình tối ưu hóa đúng.

Nếu bạn hoàn toàn chắc chắn rằng truy cập chỉ mục sẽ nhanh hơn (nghĩa là bạn có nhiều hơn 75% các hàng có col1 IS NULL ), sau đó gợi ý truy vấn của bạn:

SELECT  /*+ INDEX (t index_name_on_col1) */
        *
FROM    mytable t
WHERE   col1 IS NOT NULL

Tại sao lại là 75% ?

Bởi vì sử dụng INDEX SCAN để truy xuất các giá trị không nằm trong chỉ mục ngụ ý một kết nối ẩn trên ROWID , có giá khoảng 4 nhiều lần so với quét bảng.

Nếu phạm vi chỉ mục bao gồm nhiều hơn 25% trong số các hàng, quá trình quét bảng thường nhanh hơn.

Như đã đề cập bởi Tony Andrews , yếu tố phân cụm là phương pháp chính xác hơn để đo giá trị này, nhưng 25% vẫn là một nguyên tắc chung.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi Dấu thời gian Unix thành Giá trị ngày tháng trong Oracle

  2. Cách cài đặt nhà phát triển SQL trên máy Mac

  3. Giải thưởng bình chọn dành cho nhà phát triển cơ sở dữ liệu Oracle

  4. Làm thế nào để thay đổi cấu trúc bảng trong Oracle?

  5. Làm thế nào để lấy các bản ghi ngẫu nhiên từ cơ sở dữ liệu oracle?