Quanti indici sono troppi indici?

2

Ho una tabella con circa 37 indici. Sarebbe considerato troppo? Quali sono le migliori pratiche relative all'indicizzazione?

EDIT: si tratta di dati di magazzino, aggiornati quotidianamente con nuove transazioni. Ci sono 47 milioni di righe. 3 degli indici sono molto necessari. Gli altri 34 ~ sono indici di clausole 'where' per accelerare le query.

    
posta jeremylaw 22.03.2012 - 21:33
fonte

6 risposte

21

Un altro indice di cui hai bisogno è troppi. Uno in meno è troppo piccolo.

I've tried searching for a case where having too many indexes was a problem and couldn't really find anything

Tu KNOW ne hai troppi se i tuoi inserti sono troppo lenti e l'indice utilizzato per la lettura non accelera le cose abbastanza da compensare.

    
risposta data 22.03.2012 - 21:39
fonte
7

non esiste un "numero magico". Ogni indice dopo 0 rallenta inserimenti / aggiornamenti un po ', ma ciò non dovrebbe impedirti di creare indici necessari. 37 sembra molto, assicurati di non utilizzare indici non necessari. Per esempio, di solito se hai un indice sulle colonne A, B non hai bisogno di un indice separato su A. Oppure se hai un indice su A, B, C, D non hai bisogno di un altro indice su A, B , C. E probabilmente non guadagni molto avendo un altro indice su A, B, C, E.

    
risposta data 22.03.2012 - 21:53
fonte
4

La creazione di un indice è un compromesso. È necessario determinare se il sovraccarico di mantenimento dell'indice (e quindi il rallentamento delle operazioni DML) e lo spazio aggiuntivo consumato dall'indice valgono il guadagno di prestazioni ottenuto dalle query che utilizzano l'indice. Ciò, a sua volta, dipende da quanto le query traggono vantaggio e da quanto critiche sono quelle query.

Il numero di indici su una tabella è irrilevante in questa equazione costi-benefici - ogni indice dovrebbe essere considerato a sé stante (sebbene il vantaggio in termini di prestazioni di un particolare indice possa dipendere dal fatto che sia disponibile un indice diverso per query da usare invece).

    
risposta data 22.03.2012 - 21:40
fonte
2

Dato che hai 47 milioni di righe e stai utilizzando il database per la segnalazione, allora stiamo parlando di un tipo di applicazione Data Mart / Warehouse piuttosto che un'applicazione OLTP.

È necessario considerare l'utilizzo di uno schema a stella per iniziare e si può (in base alle funzionalità nel database scelto) creare tabelle aggregate statiche connesse a tabelle di dimensioni per fornire riepiloghi utilizzando l'elaborazione in batch. Quanto sopra ti fornirà prestazioni migliori e probabilmente meno indici. È possibile ottenere ulteriori prestazioni interrompendo (alcuni) i propri indici durante il caricamento e ricostituendoli al termine del caricamento. Costruire un indice oltre 47 milioni di file è molto veloce.

Soprattutto, è necessario giustificare la necessità di ogni indice come pratica generale di progettazione del database. Questo può essere fatto solo esaminando, in dettaglio, le esigenze di segnalazione degli utenti. Ricorda che anche se definisci gli indici, la tua query potrebbe non usarne uno o più, quindi l'utente ha bisogno, l'analisi delle query e una buona progettazione del database dovrebbero aiutarti a determinare esattamente se utilizzare un indice o meno e il tipo di indice richiesto.

Ho progettato diversi database e data mart, ma onestamente, non ho mai visto quel numero di indici per tabella.

    
risposta data 22.03.2012 - 23:27
fonte
1

Devi sempre valutare i tuoi requisiti di velocità / manutenzione per leggere i requisiti. Se hai un rapporto di lettura quasi pari al 100% per scrivere il rapporto, e aggiorni i dati molto raramente o produci anche "istantanee di sola lettura" del tuo database e utilizzi quello per il ridimensionamento in lettura, fai fuoco sul fronte indice!

Vorrei testare tutti i miei scenari in modo molto approfondito su un sistema di produzione, tuttavia, ho sentito parlare di scenari in cui gli indici aggiunti hanno rallentato considerevolmente la compilazione / gli aggiornamenti delle query.

    
risposta data 22.03.2012 - 21:41
fonte
0

La maggior parte delle cose che ho visto dice che avere più di 5 indici inizierà a rallentare la velocità di inserimento.

Considera questo, ogni indice che hai è come avere una nuova tabella nel tuo database con le stesse informazioni appena ordinate in un modo diverso. Avere 37 indici è come dover fare un inserimento 38 volte!

Nessuna regola sarà un numero solido ma a meno che non si tratti di una registrazione storica che non cambierà mai quella che potrebbe essere per molti.

    
risposta data 22.03.2012 - 21:41
fonte

Leggi altre domande sui tag