Hai ancora bisogno di indicizzazione dopo la normalizzazione del database


14

Dopo aver eseguito una buona normalizzazione, devi ancora indicizzare la tabella? In che modo ciò influirà sulle prestazioni? Interesserà anche le prestazioni in qualche modo dopo una buona normalizzazione?

Quali colonne vengono generalmente indicizzate se si dispone già della chiave primaria e della chiave esterna?

Sembra che sia già efficace per normalizzare un database. Ma potrei aver saltato l'effetto dell'indicizzazione sul database. È efficace solo quando vengono utilizzate le query? In che modo funziona / esegue e migliora un database?


5
Quali colonne vengono generalmente indicizzate se si dispone già della chiave primaria e della chiave esterna? Date. Nomi. Tutto ciò che potrebbe essere necessario cercare o ordinare.
Carson63000,

L'indice sulla chiave primaria non conta?
CodesInCos

Risposte:


34

Sì. In effetti, potresti benissimo dover prestare maggiore attenzione ai tuoi indici. La normalizzazione riguarda una conservazione ottimale . Ciò è spesso in contrasto con la velocità di recupero , poiché vengono utilizzate query più complesse con join complicati. A volte le persone che gestiscono database che richiedono velocità di recupero elevate si de-normalizzano o organizzano i propri dati in strutture leggermente meno normalizzate per facilitare il recupero.


21
L'obiettivo della normalizzazione non è l'efficienza di archiviazione, ma piuttosto la rimozione delle dipendenze di inserimento, aggiornamento ed eliminazione. Ulteriori letture

4
Sono d'accordo con @MichealT che non si tratta di efficienza. La coerenza logica era ciò che ho ottenuto dal collegamento.
JeffO,

Rimuoverò la controversa parola "efficienza" (anche se penso che sostanzialmente riassuma lo scopo generale della normalizzazione) e userò invece la parola "ottimale", lasciando ciò che significa al lettore. Lo scopo effettivo della normalizzazione non è in realtà rilevante per il motivo per cui gli indici sono ancora necessari dopo la normalizzazione di un database.
GrandmasterB,

56

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

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

Poiché richiedono spazio aggiuntivo e costi (un minimo di) prestazioni per mantenerli aggiornati, voi come progettisti di database dovete creare indici in modo esplicito per adattarli all'applicazione e ai modelli di query.

Gli indici sono ortogonali alla normalizzazione del database.


4

Sì dopo la normalizzazione è ancora necessario l'indicizzazione.

Le tabelle su cui stai lavorando beneficiano tanto quanto quelle che avevi prima della normalizzazione. In realtà, da soli sono uguali: i tavoli.

Una cosa che devi considerare, tuttavia, 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.


2

Sì.

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

C'è solo un modo per sapere quali indici creare. Accetta tutte le query nell'applicazione, trova i parametri di esempio rappresentativi per loro e chiedi al motore di database di mostrare i loro piani di query (tutti i motori di database hanno EXPLAIN, EXPLAIN QUERY PLANo comandi simili; viene chiamato in modo diverso in motori diversi) e verifica quanto tempo impiegano. Che creare indici che accelerino quelli che erano lenti. E non dimenticare di eliminare nuovamente gli indici che hai provato ma che non hai contribuito a evitare di sprecare risorse.


1

Gli indici sono generalmente necessari in tutte le tabelle tranne quelle più piccole. Praticamente ogni chiave esterna dovrebbe essere indicizzata 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 che usi in cui le clausole dovrebbero essere indicizzate se sono utili (hai bisogno di una certa variabilità nei dati in modo che i booleani non ne beneficino ad esempio) e quelli in cui è possibile indicizzare.

Tuttavia, ogni indice rallenta inserimenti \ aggiornamenti \ eliminazioni accelerando le selezioni, quindi scegli attentamente gli indici.

Gli indici sono fondamentali per prestazioni accettabili in un database.


0

Per una terza forma 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 particolare codice postale, potrebbe essere una buona idea indicizzare la colonna zip_code nella tabella dei clienti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.