sempre presente nel thread citato.
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.
3)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:
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.
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.Riprendendo il punto (2) dell´ottima pillola di Dark Bard, pensavo di parlare un po´ delle ridondanze, la cui presenza é da decidere in fase di progettazione del database.
Il problema é piú complesso di quel che potrebbe si potrebbe in un primo momento pensare.
Per ridondanza si intende una ripetizione di un´informazione, cioé inserire in una certa tabella un dato ricavabile per mezzo di query dal resto del database. Ad esempio un attributo che puó essere derivato da altri attributi della stessa tabella o di altre.
La presenza di ridondanze porta come vantaggio la semplificazione delle query e un aumento della velocitá di esecuzione.
L´inserimento di queste porta peró anche notevoli svantaggi come l´appesantimento degli aggiornamenti e un maggiore spazio occupato.
Ma quando conviene inserire una ridondanza in un database?
Prima di inserire una ridondanza all´interno del database é necessario analizzare le sue prestazioni.
I due principali indici di prestazione considerano costo delle operazioni e occupazione di memoria. Nel caso di un database (che é il caso che analizzo), il costo di un´operazione é misurato in funzione del numero di occorrenze delle tabelle e delle associazioni che le coinvolgono. Per fare questa analisi é necessario conoscere il volume di dati, cioé occorrenze e dimensioni degli attributi, e le caratteristiche delle operazioni, cioé tipo di operazione, la frequenza e i dati coinvolti.
In genere é sufficiente limitarsi ad analizzare le prestazioni delle operazioni piú frequenti.
Per desrivere il volume dei dati e le caratteristiche delle operazioni é possibile costruire la tavola dei volumi, in cui vengono riportati tutti i concetti dello schema con i volumi di accessi previsti e la tavola delle operazioni dove sono inserite i tipi di operazioni e loro frequenza.
Per facilitare l´analisi si considera solitamente un accesso in scrittura come il doppio di uno in lettura.
Quindi accedere 2 volte in lettura ad una tabella equivale ad accedere 1 volta in scrittura.
La presenza o meno di una ridondanza é quindi essenziale in termini di prestazione di un database, soprattutto se questo inizia ad avere un numero elevato di dati.