Altri tips per Mysql

MySql Ottobre 27th, 2007

Ritorno sull’argomento ottimizzazione dato che ultimamente al lavoro gli sto dedicando parecchio tempo.

comando explain: l’utilizzo di questo comando (applicato precedentemente ad una query) consente di capire il lavoro che fa l’optimizer nell’esecuzione. Ci permette di capire quali indici vengono utilizzati (ed anche se non vengono utilizzati) per vedere quali siano le contromisure da prendere per aumentare l’efficienza

permessi: semplificare al massimo i permessi degli utenti che accedono al db

analyze / optimize: il primo comando permette di aggiornare l’indice di una tabella (aumentando l’efficienza delle SELECT) mentre il secondo, oltre a svolgere questo compito, permette di “allineare” il contenuto delle tabelle dopo aver eseguito delle cancellazioni (specialmente nel caso in cui le tabelle contengono campi a lunghezza variabile tipo VARCHAR, BLOB ecc.).
Si consiglia di eseguire il comando ANALYZE spesso per mantenere aggiornati gli indici e il comando OPTIMIZE nei casi in cui ci sia stata una consistente eliminazione di dati da una tabella

BENCHMARK: consente di ripetere un numero arbitrario di volte una query per calcolare i tempi di esecuzione. Ciò consente di valutare l’impatto sul funzionamento di un DB specialmente per le query utilizzare più di frequente.

Tags: , , , ,

Tips di ottimizzazione Mysql

MySql Ottobre 9th, 2007

Ci sono alcune regole banali che bisognerebbe seguire quando si scrivono le query che spesso vengono tralasciate perchè considerate irrilevanti; in realtà ogni accorgimento che si prende si riflette sulle prestazioni del sistema in generale. Di seguito riporto alcune pillole da tenere presente.

parentesi: mentre si scrive un’interrogazione, cercare di utilizzare il minor numero di parentesi possibile…ovvero…utilizzare soltanto quelle strettamente necessarie; il parsing della query è più lungo perchè la presenza di parentesi modifica le priorità delle clausole.

casting delle variabili: scrivere una condizione WHERE in questo modo WHERE id='10' oppure in questo WHERE id=10, (ovviamente considerando id come campo numerico) non è la stessa cosa perchè nel primo caso si costringe Mysql ad operare un casting del valore costante in modo da poter effettuare un confronto tra tipi identici; il secondo caso è preferibile.

attributi in output: nelle SELECT inserire in output soltanto i campi effettivamente necessari; evitare di scrivere SELECT * FROM ... quando ci serve soltanto un attributo.

operatore LIKE: limitare l’operatore LIKE ai casi di effettiva necessità. Cercare di evitare di inserire la wildcard (%) all’inizio della stringa. Ad es. evitare una condizione del tipo WHERE nome LIKE '%mario%'

LIMIT: sfruttare l’operatore LIMIT se è sufficiente ottenere un limitato numero di righe in output.

INSERT: se ci si trova nella situazione di dover eseguire una serie di INSERT, si possono raggruppare tutt in una query unica. Ad esempio le tre interrogazioni:
INSERT INTO utenti (nome,cognome)
VALUES ('Mario','Rossi');
INSERT INTO utenti (nome,cognome)
VALUES ('Giuseppe','Verdi');
INSERT INTO utenti (nome,cognome)
VALUES ('Antonio','Neri');

possono essere integrate nella query:
INSERT INTO utenti (nome,cognome)
VALUES ('Mario','Rossi'),
('Giuseppe','Verdi'),
('Antonio','Neri');

con un notevole guadagno in efficienza.

Tags: , , , ,

Chiudi
Invia e-mail