Oracle Database 12c oferuje ciekawe rozwiązanie, pozwalające zredukować rozmiar indeksu tworzonego na tabeli partycjonowanej, w której wiele partycji ma charakter archiwalny (bardzo rzadko podlega zapytaniom). Indeks częściowy – bo o nim mowa – może obejmować swoim zasięgiem wybrane partycje tabeli, podczas gdy rekordy w pozostałych partycjach tabeli pozostają bez indeksu. Gdy realizowane jest zapytanie do tak indeksowanej tabeli, optymalizator zapytań skorzysta z indeksu w przypadku partycji uwzględnionych w indeksie, oraz z pełnego odczytu partycji w pozostałych przypadkach.
Aby utworzyć indeks częściowy należy najpierw na poziomie tabeli wskazać, które jej partycje powinny być uwzględniane w indeksie, a które nie (klauzula „indexing”):
create table faktury (nr varchar2(20), kwota number(8,2), data date)
partition by range (data)
(partition p1 values less than (to_date('01-01-2014','DD-MM-YYYY')) indexing off,
partition p2 values less than (to_date('01-01-2015','DD-MM-YYYY')) indexing off,
partition p3 values less than (to_date('01-01-2016','DD-MM-YYYY')) indexing on);
a następnie utworzyć indeks z klauzulą „indexing partial”:
create index i1 on faktury(nr) indexing partial;
A oto przykład planu wykonania zapytania do tabeli posiadającej indeks częściowy.
select * from faktury where nr='12345'
------------------------------------------------------------------------------
| Id | Operation | Name |Rows|Pstart|Pstop|
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 114| | |
| 1 | VIEW | VW_TE_2| | | |
| 2 | UNION-ALL | | | | |
|* 3 | TABLE ACCESS BY GLOBAL INDEX ROWID BATCHED | FAKTURY| 76 | 3 | 3 |
|* 4 | INDEX RANGE SCAN | I1 | 114| | |
| 5 | PARTITION RANGE ITERATOR | | 75 | 1 | 2 |
|* 6 | TABLE ACCESS FULL | FAKTURY| 75 | 1 | 2 |
------------------------------------------------------------------------------
Zapytanie zostało podzielone na dwie części. Przeszukanie partycji nr 3 odbyło się z użyciem indeksu. Partycje nr 1 i nr 2 zostały poddane pełnemu odczytowi.