Ottimizzazione di MySQL tramite indici per Joomla e WordPress

Un indice di database è una struttura di dati che migliora la velocità delle operazioni in una tabella.

Ogni volta che l’applicazione Web esegue una query di database, il database esaminerà tutte le righe della tabella per trovare quelle che corrispondono alla tua richiesta. Man mano che le tabelle del database crescono, è necessario ispezionare ogni volta un numero crescente di righe che può rallentare le prestazioni generali del database e della propria applicazione.

Gli indici MySQL risolvono questo problema, prendendo i dati da una colonna nella tabella e archiviandoli in ordine alfabetico in una posizione separata denominata indice. Maggiori informazioni su questo possono essere trovate qui.

Gli indici possono essere creati facilmente tramite phpMyAdmin. Di seguito puoi trovare un esempio di tale indice:

Prendiamo una tabella di esempio chiamata ” campione ” con solo due righe: ” numero ” e ” impiegato “. Se si esegue una semplice query SQL come: 

SELECT * FROM sample WHERE number = 4;

MySQL controllerà tutti i record e restituirà solo quello con il valore numerico impostato su 4.

Ma se hai diverse migliaia di voci, ad esempio, questa sarà una query lenta. In questo caso abbiamo un campo unico – ” numero “. Pertanto, possiamo creare un indice per questo. L’indicizzazione creerà un registro interno che viene salvato dal servizio MySQL. Può essere fatto con la seguente query:

ALTER TABLE sample ADD INDEX (number);
Una volta impostato questo indice, la volta successiva che si desidera ottenere le informazioni per il dipendente numero 4, il servizio andrà direttamente ad esso utilizzando l’indice e restituirà le informazioni molto più velocemente.

Questo è solo un esempio di base. Per i database più grandi, la differenza nel tempo di caricamento può essere significativa. L’indicizzazione del database può ridurre drasticamente i tempi di caricamento delle tue applicazioni web.

Esiste un’altra query che è possibile utilizzare per aumentare la velocità di caricamento del database:

OPTIMIZE TABLE sample;

Per ottimizzare tutte le tabelle sul server in tutti i database è possibile utilizzare ad esempio comando commandline:

mysqlcheck --all-databases --optimize --skip-write-binlog

Per ottimizzare in tutti i database sul server solo tabelle, dove c’è un minimo di 10 MB di overhead ed è almeno il 10% delle dimensioni della tabella, è possibile usare un uno script bash semplice:

#!/bin/bash

mysql -e "SHOW DATABASES" | while read database therest; do
 mysql -D$database -e "SHOW TABLE STATUS WHERE Data_free>10000000 AND Data_free/Data_length > 0.1" | while read tblname therest; do
 mysqlcheck --optimize --skip-write-binlog $database $tblname
 done
done