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

Jak używać indeksu opartego na funkcjach w kolumnie zawierającej wartości NULL w Oracle 10+?

Można użyć indeksu, chociaż optymalizator mógł zdecydować się nie używać go w konkretnym przykładzie:

SQL> create table my_objects
  2  as select object_id, object_name
  3  from all_objects;

Table created.

SQL> select count(*) from my_objects;
  2  /

  COUNT(*)
----------
     83783


SQL> alter table my_objects modify object_name null;

Table altered.

SQL> update my_objects
  2  set object_name=null
  3  where object_name like 'T%';

1305 rows updated.

SQL> create index my_objects_name on my_objects (lower(object_name));

Index created.

SQL> set autotrace traceonly

SQL> select * from my_objects
  2  where lower(object_name) like 'emp%';

29 rows selected.


Execution Plan
----------------------------------------------------------

------------------------------------------------------------------------------------
| Id  | Operation                   | Name            | Rows  | Bytes | Cost (%CPU)|
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                 |    17 |   510 |   355   (1)|
|   1 |  TABLE ACCESS BY INDEX ROWID| MY_OBJECTS      |    17 |   510 |   355   (1)|
|*  2 |   INDEX RANGE SCAN          | MY_OBJECTS_NAME |   671 |       |     6   (0)|
------------------------------------------------------------------------------------

Dokumentacja, którą przeczytałeś, prawdopodobnie wskazywała, że ​​tak jak każdy inny indeks, klucze całkowicie puste nie są przechowywane w indeksie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oświadczenie Oracle Select w stanie JEŻELI

  2. oracle plsql, jeśli nie znaleziono, powtórz

  3. Dostrajanie wydajności SQL dla Oracle Many OR vs IN ()

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

  5. Wygeneruj zakres dat z dwóch kolumn dat