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

Tại sao chỉ mục không được sử dụng cho truy vấn này?

CẬP NHẬT: Hãy thử làm cho cột col KHÔNG ĐẦY ĐỦ. Đó là lý do nó không sử dụng chỉ mục. Khi nó không rỗng, đây là kế hoạch.

SELECT STATEMENT, GOAL = ALL_ROWS           69  10  30
                    HASH GROUP BY           69  10  30
 INDEX FAST FULL SCAN   SANDBOX TEST_INDEX  56  98072   294216

Nếu trình tối ưu hóa xác định rằng KHÔNG sử dụng chỉ mục hiệu quả hơn (có thể do viết lại truy vấn), thì nó sẽ không. Các gợi ý của trình tối ưu hóa chỉ là vậy, cụ thể là các gợi ý để cho Oracle biết một chỉ mục mà bạn muốn nó để sử dụng. Bạn có thể coi chúng như những gợi ý. Nhưng nếu trình tối ưu hóa xác định rằng tốt hơn là không nên sử dụng chỉ mục (một lần nữa, do kết quả của việc viết lại truy vấn chẳng hạn), thì nó sẽ không.

Tham khảo liên kết này: http:// tải xuống. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "Việc chỉ định một trong những gợi ý này khiến trình tối ưu hóa chỉ chọn đường dẫn truy cập đã chỉ định nếu đường dẫn truy cập có sẵn dựa trên sự tồn tại của chỉ mục hoặc cụm và trên cấu trúc cú pháp của câu lệnh SQL. Nếu gợi ý chỉ định một đường dẫn truy cập không khả dụng, thì trình tối ưu hóa bỏ qua nó. "

Vì bạn đang chạy thao tác đếm (*), trình tối ưu hóa đã xác định rằng việc chỉ quét toàn bộ bảng và băm thay vì sử dụng chỉ mục của bạn sẽ hiệu quả hơn.

Đây là một liên kết hữu ích khác về gợi ý: http://www.dba-oracle.com/t_hint_ignored. htm



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tác động của EM SQL Monitor

  2. script lấy dữ liệu từ tệp txt trong mệnh đề where

  3. Thu thập hàng loạt vào và thực hiện ngay lập tức trong Oracle

  4. Làm thế nào để so sánh các chuỗi trong sql bỏ qua trường hợp?

  5. lấy tên từ các id được phân tách bằng dấu phẩy trong SQL