indici

Indici multipli sulla stessa colonna

Indici multipli sulla stessa colonna Fino alla release Oracle 11g non era possibile creare più di un indice sulla stessa colonna di una tabella. A partire da Oracle 12c, è possibile creare indici multipli sulla stessa colonna a patto che gli index type siano differenti. Tuttavia, solo un tipo di indice è utilizzabile/visibile in un dato momento. Per testare gli indici invisibili, è necessario settare dei parametri sull’init.ora: optimizer_use_use_invisible_indexes = true; Non utilizzare la clausola INVISIBLE causerà il seguente errore: ORA-01408: such column list already indexed Un esempio: create unique index test_idx1 on test_tab (id1); index created. create index test_idx2 Continua a leggere

Monitoraggio degli indici

Troppi indici non possono essere una buona cosa … Il Motore Oracle mantiene tutte gli indici definiti su un tavolo indipendentemente dalla loro utilizzazione. La loro manutenzione può causare notevole utilizzo di CPU e I / O, che può essere pesante per le prestazioni del sistema in una scrittura ad alta intensità. Periodicamente può essere utile per identificare e rimuovere gli indici che non vengono utilizzati. Il monitoraggio degli indici ci permette di fare una precisa analisi. È importante garantire che il monitoraggio dell’indice avviene per un lungo periodo di tempo (es. tutto il ciclo di vita dell’applicazione). Monitoraggio Indice Continua a leggere

Usare gli indici invisibili

Table created. SQL> create index ind_TEST.index_tables on TEST.tables_empty (a) Index created. OWNER                          OBJECT_NAME                    OBJECT_TYPE —————————— —————————— ———– TEST                           TABLES_EMPTY                   TABLE IND_TEST                       INDEX_TABLES                  INDEX   SQL> exec dbms_stats.gather_table_stats (ownname=>’TEST’,tabname=>’TABLES_EMPTY’,cascade=>TRUE); PL/SQL procedure successfully completed. SQL>  exec dbms_stats.gather_index_stats (ownname=>’IND_TEST’,indname=>’INDEX_TABLES’); PL/SQL procedure successfully completed. SQL> conn ind_TEST Enter password: SQL>  explain plan for 2  select * from TEST.TABLES_EMPTY; SQL> @?/rdbms/admin/utlxpls   PLAN_TABLE_OUTPUT ———————————————————————– Plan hash value: 932631555   ———————————————————————————- | Id  | Operation    | Name         | Rows  | Bytes | Cost (%CPU)| Time     | ———————————————————————————- |   0 | SELECT STATEMENT  |       |     1 |    13 |     2   (0)| 00:00:01 | |   1 |  TABLE Continua a leggere

Index Tuning

Oracle indexes can be tuned looking to three main characteristics: SELECTIVITY: you can calculate index selectivity using this formula: SELECT DISTINCT_KEYS/NUM_ROWS SELECTIVITY FROM DBA_INDEXES / Values range from 0 to 1, where 1 is the optimal value (UNIQUE indexes and PK), while with values near to 0 performance is lower CLUSTERING FACTOR: measures how many keys are stored in a single index block. This value is stored in DBA_INDEXES.CLUSTERING_FACTOR column. If it’s near to DBA_INDEXES_BLOCKS value then the index is good, if instead it’s near to DBA_INDEXES.NUM_ROWS performance is lower BLEVEL: Oracle indexes are stored in a B-TREE structure where Continua a leggere