Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle 10g - optymalizuj GDZIE NIE JEST NULL

Optymalizator uważa, że ​​pełne skanowanie tabeli będzie lepsze.

Jeśli jest tylko kilka NULL wierszy, optymalizator ma rację.

Jeśli masz absolutną pewność, że dostęp do indeksu będzie szybszy (to znaczy, że masz więcej niż 75% wiersze z col1 IS NULL ), a następnie podpowiedz swoje zapytanie:

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

Dlaczego 75% ?

Ponieważ używanie INDEX SCAN pobieranie wartości nieobjętych indeksem oznacza ukryte sprzężenie w ROWID , co kosztuje około 4 razy więcej niż skanowanie tabeli.

Jeśli zakres indeksu obejmuje więcej niż 25% wierszy, skanowanie tabeli jest zwykle szybsze.

Jak wspomniał Tony Andrews , współczynnik grupowania jest dokładniejszą metodą pomiaru tej wartości, ale 25% to nadal dobra zasada.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak programowo wygenerować DDL z bazy danych Oracle?

  2. Jak usunąć duplikaty z listy oddzielonej spacjami przez Oracle regexp_replace?

  3. Funkcja NLS_LOWER() w Oracle

  4. Tworzenie profili w Oracle dla bezpieczeństwa użytkownika

  5. jak wywołać jeden przechowywany proc z pylnika i zmodyfikować zwracany refcursor?