Non è possibile creare un indice in una tabella temporanea mentre è utilizzato da un'altra sessione, quindi risposta è: No, non può colpire qualsiasi altro processo, perché non è possibile.
Un indice esistente interessa solo la sessione corrente, perché per qualsiasi altra sessione la tabella temporanea appare vuota, quindi non può accedere a nessun valore di indice.
Sessione 1:
SQL> create global temporary table index_test (val number(15)) on commit preserve rows;
Table created.
SQL> insert into index_test values (1);
1 row created.
SQL> commit;
Commit complete.
SQL>
Sessione 2 (mentre la sessione 1 è ancora collegato):
SQL> create unique index idx_val on index_test(val);
create unique index idx_val on index_test(val)
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
SQL>
Torna alla sessione 1:
SQL> delete from index_test;
1 row deleted.
SQL> commit;
Commit complete.
SQL>
Sessione 2:
SQL> create unique index idx_val on index_test(val);
create unique index idx_val on index_test(val)
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
SQL>
non riesce ancora, è necessario prima disconnettere la sessione 1 o la tabella deve essere troncata.
Sessione 1:
SQL> truncate table index_test;
Table truncated.
SQL>
Ora è possibile creare l'indice in Sessione 2:
SQL> create unique index idx_val on index_test(val);
Index created.
SQL>
Questo indice, naturalmente, sarà utilizzato da qualsiasi sessione.
fonte
2013-12-03 15:51:40
sì tavole temporanee vero. – EvilTeach
L'indice esiste per tutte le sessioni (quindi potrebbe influire sul loro trattamento e potenzialmente causare problemi se è un indice univoco e si aspettano dati non univoci, o anche se rallenta solo i loro inserti/aggiornamenti). Inoltre, aggiungendo/rilasciando un indice si eliminerebbe un breve blocco sul tavolo Allo stesso modo è possibile raccogliere statistiche su una tabella temporanea, ma si presume che si applichino a tutte le query su quella tabella che potrebbero essere o non essere appropriate per il proprio situazione. –
> Gary No, l'indice viene memorizzato esattamente nello stesso modo della tabella, separatamente in ogni sessione, quindi non è possibile ottenere collisioni tra le sessioni anche se l'indice è univoco. Ovviamente l'aggiunta/eliminazione degli indici richiede un blocco sulla tabella, ma quanto spesso si aggiungono/rilevano indici? Sì, le statistiche si applicano globalmente alle tabelle temporanee, motivo per cui a volte è necessario utilizzare l'hint CARDINALITY quando si interrogano i GTT. –