SQL Ottimizzazione guidata di Oracle SQL Developer v3 suggerisce quanto segue per la mia domanda:E 'necessario considerare cadere l'indice esistenti in quanto è un prefisso dell'indice consigliato
consideri in esecuzione il Consulente di accesso per migliorare la schema fisico design o creazione dell'indice raccomandato. Se si sceglie di creare l'indice raccomandata, considerare cadere l'indice "schemaname". "IndexName" (nella 'COLUMN1') perché è un prefisso del dell'indice consigliato.
create index SCHEMANAME.NEW_INDEXNAME on SCHEMANAME.TABLENAME("COLUMN1","COLUMN2");
C'è qualche danno nel non fare suggerimento in grassetto? Il problema è che l'indice esistente che suggerisce di eliminare è utilizzato da altre procedure. Non pensavo che gli idex potessero "danneggiarsi" a vicenda, c'è qualche svantaggio nel lasciare entrambi gli indici oltre allo spazio su disco che prenderanno e un calo insignificante delle prestazioni su insert/update?
+1 ma forse potresti anche aggiungere il lato negativo dello spazio di archiviazione aggiuntivo? –
spot on! vecchio indice è su column1. Bene, se rimuoverlo non danneggerebbe il filtraggio su column1, allora perché non creiamo sempre un indice big fat per tutte le colonne su cui effettuiamo la query? – Tsar
@tsar Un indice sui dati crea copie dei dati in una struttura dati diversa (albero B in SQL Server, non sicuro in altri RDBMS). Se un indice non cluster, copierà solo quei campi (Column1/Column2 in questo caso) e quindi un riferimento per cercare il resto dei dati di quel record nella tabella completa. Un indice cluster archivia l'intero set di dati nella struttura dati aggiuntiva. Questo significa * un sacco * di overhead dei dati e un sacco di elaborazione per bilanciare la struttura dei dati su insert/update. –