Ciao a tutti; ho pensato di scrivere una breve pillola su come ottimizzare MYSQL per renderene l'eseguzione più veloce ed efficente...
I passi da compiere sono fondamentalmente 3:
1)Realizzare istruzioni SQL efficaci:
le istruzioni SQL, se ben progettate, diminuiscono di molto il tempo di eseguzione della query siccome sarebbe possibile scrivere un libro intero sull'argomento, ed ognuno avrebbe la sua in proposito, vi do solo delle semplici linee guida da seguire.
- l'utilizzo degli indici velocizza di molto l'eseguzione della query; per questo motivo è bene utilizzare gli indici ogni volta che è possibile
- Evitare l'utilizzo di "punteggiature estranea" nelle proprie query: infatti Mysql analizza prima i segni di interpretazione estranei prima di eseguire la query, e per questo motivo l'eseguzione risulta rallentata. La punteggiatura estranea comprende, per esempio, le parentesi aggiuntive, utilizzate da molti per ordinare le query.
- La parola LIMIT utilizzata nelle proprie query obbliga Mysql ad utilizzare gli indici anke quando normalmente ciò non dovrebbe avvenire.
- Rendere sicuro un database è sicuramente una buona cosa, ma come sappiamo "il troppo stroppia"!!Infatti quanto maggiore è la sicurezza, tanto maggiore sarà il carico di informazioni che dovrà supportare Mysql. Un consiglio potrebbe essere quello di controllare la sicurezza a livello di PHP, e non a livello server, così da sovraccaricare meno il database.
- Un ultimo accorgimento è quello di usare SELECTCOUNT(+) per il conteggio di tutte le righe di un database. Infatti questa funzione usa il numero contenuto nell'intestazione della tabella per conteggiare le righe.
2)Realizzare Tabelle più veloci:
La realizzazione di tabelle veloci ed efficenti è sicuramente il modo migliore per gestire il proprio database. Oltre al consiglio di progettare al meglio il database prima di crearlo, vi posso dare le seguenti direttive:[*]Utilizzare il tipo di dati, per un campo, il più piccolo possibile, in modo da utilizzare meno memoria e da recuperare i dati più velocemente.
- Evitare di utilizzare campi NULL; piuttosto inserire un valore vuoto (che è diverso da nullo!!). In questo modo si risparmia spazio (lo so, è assucrdo che QUALCOSA occupi più-spazio di NULLA ma è così) e si velocizzano le operazioni.
- Evitare l'uso di colonne a lunghezza variabile; come vediamo queste influenzano il tipo di tabella utilizzata, peggiorando le prestazioni. Se è proprio necessario, ovviamente, nn si può fare nulla!
- Qui entriamo nel discorso TIPO TABELLA: esistono 3 tipi di tabelle a cui può accede chiunque (static,dynamic,heap) ed una a cui hanno accesso solo gli utenti paganti (compressed); la tabella static è quella standard, molto veloce, e viene utilizzata quando nn sono presenti campi variabili; altrimenti la tabella è convertita automaticamente in dynamic, un tipo di tabella più lento. la tabella heap è una tabella temporanea, molto veloce per tabelle di piccole dimensioni, che esiste solo in memoria. Non l'ho mai usate, anke se dovrebbe essere particolaremte utile per unioni o cose simili. Infine la tabella compressed è un tipo di tabella di sola lettura, che richiede poco spazio su disco ed è molto veloce.
- I valori predefiniti, sfruttati da poche persone, sono invece molto utili durante le operazioni di insert; inquesto caso si risparmia tempo per l'analisi dell'istruzione.
- Infine vi consiglio di evitare l'utilizzo di troppi indici: questi velocizzano le istruzioni di SELECT, ma rallentano INSERT ed UPDATE.
4)Reimpostare le variabili di sistema:
Qui entriamo in un discorso più specifico: le variabili di sistema di mysql possono essere impostate per migliorarne le prestazioni, sia per quanto riguarda l'affidabilità che la velocità di esguzione. Le variabili che vi elenco sono 5; ne sono presenti molte di più, ma il loro utilizzo specifico è un po com plesso, oppure sono variabili di uso facilmente comprensibile.Dicevamo:
[list=1][*]buffers: l'incremeto di qualunque buffer permetterà di ottenere un database molto più veloce. Attenti però che un'impostazione troppo alta potrebbe creare solamente danni. Impostate quindi i buffers in base alla quantità di memoria disponibile.[*]Wait_timeout: rappresenta il tempo che trascorre prima che venga chiusa automaticamente una connessione a Mysql a causa dell'inattività. Abbassare il numero fa migliorare le prestazioni.[*]back_log: controlla quante connessioni simultanee è in grado di reggere Mysql mentre crea nuovi thread. Minore è il numero, maggiore sarà la velocità, ma la prestazione effettiva potrbbe risentirne.[*]Delayed_queue_size: rappresenta il numero di righe accodabili con INSERT DELAYED. Meno saranno le righe accodabili, più veloce sarà Mysql.[*]table_cache: controlla il numero di tabelle aperte per tutti i thread; aumentando questa variabile, aumenteranno le tabelle caricate contemporaneamente e l'esecuzione di Mysql sarà molto più veloce. Il problema in questo caso sorge dal tipo di sistema operativo, che potrebbe avere dei limiti che possono influire sui files caricati contemporaneamente.[/list=1]
come ultimo consiglio vi posso , in caso abbiate un vostro server, darvi quello di far funzionare Mysql sotto Linux, e di avere un pc con un buon hardware per sostenere molto più velocemente le operazioni di Mysql.
Aspetto critiche , aggiunte e consigli
HASTA!:metallica