Oracle
 sql >> Database >  >> RDS >> Oracle

Quando dovrei usare la tabella organizzata dell'indice di Oracle? Oppure, quando non dovrei?

Fondamentalmente una tabella organizzata per indice è un indice senza una tabella. C'è un oggetto tabella che possiamo trovare in USER_TABLES ma è solo un riferimento all'indice sottostante. La struttura dell'indice corrisponde alla proiezione della tabella. Quindi, se hai una tabella le cui colonne sono costituite dalla chiave primaria e al massimo da un'altra colonna, allora hai un possibile candidato per INDEX ORGANIZED.

Il caso d'uso principale per la tabella organizzata dell'indice è una tabella a cui si accede quasi sempre dalla sua chiave primaria e vogliamo sempre recuperare tutte le sue colonne. In pratica, è molto probabile che le tabelle organizzate per indice siano dati di riferimento, affari di ricerca del codice. Le tabelle delle applicazioni sono quasi sempre organizzate in mucchio.

La sintassi consente a un IOT di avere più di una colonna non chiave. A volte questo è corretto. Ma è anche un'indicazione che forse dobbiamo riconsiderare le nostre scelte progettuali. Certamente se ci troviamo a considerare la necessità di indici aggiuntivi sulle colonne delle chiavi non primarie, probabilmente è meglio con una normale tabella heap. Quindi, poiché la maggior parte delle tabelle probabilmente necessita di indici aggiuntivi, la maggior parte delle tabelle non è adatta per gli IOT.

Tornando a questa risposta, vedo un paio di altre risposte in questo thread che propongono tabelle di intersezione come candidati idonei per gli IOT. Questo sembra ragionevole, perché è comune che le tabelle di intersezione abbiano una proiezione che corrisponde alla chiave candidata:STUDENTS_CLASSES potrebbe avere una proiezione di solo (STUDENT_ID, CLASS_ID).

Non credo che questa sia ghisa. Le tabelle di intersezione hanno spesso una chiave tecnica (es. STUDENT_CLASS_ID). Possono anche avere colonne non chiave (le colonne di metadati come START_DATE, END_DATE sono comuni). Inoltre non esiste un percorso di accesso prevalente - vogliamo trovare tutti gli studenti che seguono una lezione tutte le volte che vogliamo trovare tutte le classi che uno studente sta frequentando - quindi abbiamo bisogno di una strategia di indicizzazione che supporti entrambi allo stesso modo. Non dire che le tabelle di intersezione non sono un caso d'uso per gli IOT. solo che non lo sono automaticamente.