Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il costo dell'indicizzazione di più colonne db?

Indicizza ciò che sembra più logico (che si spera sia ovvio, ad esempio, una colonna ID cliente nella tabella CLIENTI).

Quindi esegui l'applicazione e raccogli periodicamente le statistiche per vedere le prestazioni del database. RUNSTATS su DB2 è un esempio, spero che MySQL abbia uno strumento simile.

Quando trovi alcune query eseguite di frequente che eseguono scansioni complete della tabella (o impiegano troppo tempo per altri motivi), allora e solo allora , dovresti aggiungere più indici. Non serve a niente ottimizzare una query eseguita una volta al mese a mezzanotte in modo che possa terminare alle 12:05 anziché alle 12:07. Tuttavia, è un enorme miglioramento ridurre una query rivolta ai clienti da 5 secondi a 2 secondi (è ancora troppo lenta, le query rivolte ai clienti dovrebbero essere inferiori al secondo, se possibile).

Più indici tendono a rallentare gli inserimenti e ad accelerare le query. Quindi è sempre un atto di equilibrio. Ecco perché aggiungi indici solo in risposta specifica a un problema. Qualsiasi altra cosa è un'ottimizzazione prematura e dovrebbe essere evitata.

Inoltre, rivedi periodicamente gli indici che hai già per vedere se sono ancora necessari. È possibile che le query che ti hanno portato ad aggiungere quegli indici non vengano più eseguite abbastanza spesso da giustificarlo.

Ad essere onesti, non credo che l'indicizzazione di tre colonne su una tabella ti farà soffrire a meno che tu non preveda di archiviare un numero davvero enorme di righe :-) - l'indicizzazione è piuttosto efficiente.

Dopo la tua modifica che afferma:

La mia risposta è che 200 record al giorno sono un valore estremamente piccolo per un database, sicuramente non avrai nulla di cui preoccuparti con quei tre indici.

Proprio questa settimana, ho importato un giorno di transazioni in una delle nostre tabelle di database al lavoro e conteneva 2,1 milioni di record (otteniamo almeno una transazione al secondo durante l'intera giornata da 25 macchine separate). E ha quattro chiavi composite separate che sono un po' più intense delle tue tre chiavi individuali.

Ora concesso, è su un database DB2 ma non riesco a immaginare che IBM sia così molto meglio delle persone di MySQL che MySQL può gestire solo meno dello 0,01% del carico DB2.