Hai ancora bisogno dell'indicizzazione dopo la normalizzazione del database

14

Dopo aver eseguito una buona normalizzazione, hai ancora bisogno di indicizzare la tabella? Come questo influenzerà le prestazioni? Influenzerà anche le prestazioni in qualche modo dopo una buona normalizzazione?

Quali colonne vengono solitamente indicizzate se hai già la chiave primaria e la chiave esterna?

Sembra che sia già efficace per normalizzare un database. Ma, potrei aver saltato il modo in cui l'indicizzazione influisce sul database. È efficace solo quando vengono utilizzate le query? Come funziona / esegue e migliora il database?

    
posta Franz Noel 06.01.2013 - 23:16
fonte

6 risposte

34

Sì. In effetti, potrebbe essere necessario prestare maggiore attenzione ai tuoi indici. La normalizzazione riguarda lo storage ottimale . Questo è spesso in disaccordo con velocità di recupero , in quanto vengono utilizzate query più complesse con join complicati. A volte le persone che gestiscono database che richiedono velocità di recupero elevate si dis-normalizzano o organizzano i loro dati in strutture leggermente meno normalizzate per semplificare il recupero.

    
risposta data 07.01.2013 - 05:25
fonte
56

Penso che tu abbia frainteso cosa fa l'indicizzazione per le prestazioni del database.

Un indice aiuta le file find del database. Gli indici sono strutture dati specializzate che, in cambio di spazio su disco extra e alcune prestazioni durante l'inserimento e l'aggiornamento, aiutano il motore di database a trovare le righe corrispondenti.

Poiché richiedono uno spazio extra e costano (un minimo di) prestazioni per mantenerle aggiornate, tu come progettista di database devi creare indici in modo esplicito per soddisfare le tue applicazioni e i tuoi modelli di query.

Gli indici sono ortogonali alla normalizzazione del database.

    
risposta data 06.01.2013 - 23:21
fonte
4

Sì, dopo la normalizzazione hai ancora bisogno dell'indicizzazione.

Le tabelle su cui stai lavorando ne trarranno vantaggio tanto quanto le tabelle che avevi prima della normalizzazione. In realtà, da soli sono uguali: tavoli.

Una cosa che devi considerare, però, gli indici ti aiutano a trovare più velocemente i tuoi dati. La normalizzazione di un progetto di un database è sempre buona, ma a volte per motivi di prestazioni è necessario denormalizzare l'implementazione. Ma questo è solo caso per caso.

    
risposta data 07.01.2013 - 00:15
fonte
2

Sì.

Gli indici sono un metodo per accelerare la ricerca dei dati. Alcune query sono per chiavi primarie, che di solito sono indicizzate implicitamente dal motore del database, ma è probabile che altre query utilizzino altre colonne. Spesso alcune query cercano per colonne che non sono nemmeno univoche e quindi non possono diventare chiavi primarie dopo una normalizzazione. Probabilmente dovrai indicizzare tali colonne.

C'è solo un modo per sapere quali indici creare. Prendi tutte le query nell'applicazione, trova i parametri di esempio rappresentativi per loro e fai in modo che il motore di database mostri i piani di query (tutti i motori di database hanno EXPLAIN , EXPLAIN QUERY PLAN o comando simile, viene chiamato in modo diverso in motori diversi) e prova per quanto tempo essi prendono. Di creare indici che acceleri quelli lenti. E non dimenticare di rilasciare nuovamente gli indici che hai provato, ma non hai aiutato a evitare sprechi di risorse.

    
risposta data 07.01.2013 - 09:21
fonte
1

Gli indici sono generalmente necessari in tutte le tabelle tranne quelle più piccole. Praticamente tutte le chiavi straniere dovrebbero essere indicizzate e la semplice impostazione di un FK non significa che tu abbia un indice (almeno non in alcuni database, controlla la documentazione di db). Campi a cui ti unisci frequentemente o in cui le clausole devono essere indicizzate se sono quelle che ne trarrebbero beneficio (hai bisogno di una certa quantità di variabilità nei dati in modo che i Booleani non ne traggano vantaggio) e quelli in cui è possibile indicizzare.

Tuttavia, ogni indice rallenta inserti \ aggiornamenti \ cancella mentre l'accelerazione seleziona, quindi scegli attentamente gli indici.

Gli indici sono fondamentali per le prestazioni accettabili in un database.

    
risposta data 14.03.2013 - 22:17
fonte
0

Per un terzo modulo normale avrai sicuramente bisogno di indici su tutte le chiavi primarie.

Se hai bisogno di altri indici dipende da come viene utilizzato il tuo database. Ad esempio, se cerchi regolarmente clienti in un determinato codice postale, potrebbe essere una buona idea indicizzare la colonna zip_code nella tabella dei clienti.

    
risposta data 15.03.2013 - 06:55
fonte

Leggi altre domande sui tag