
Una delle cose che non ci si ricorda mai quando si fanno delle operazioni di cancellazione di una certa rilevanza è quella di ottimizzare le tabelle. Più il nostro database viene utilizzato più cresce, lo spazio su disco aumenta o le operazioni diventano sempre più lente. E' ora di ottimizzare le tabelle recuperando lo spazio inutile.
Quando si cancella un record da una tabella, in verità il record non viene cancellato, ma solamente messo in uno stato di “indisponibilità”, quindi qualsiasi query SQL non terrà più conto di questo record, ma fisicamente questo sarà ancora sul nostro disco e renderà l'accesso agli altri dati più lento. In fin dei conti per prelevare i dati del record 1000, quando prima ce ne sono 900 marcati come “rimossi/cancellati” è molto più lento (ovviamente in tempi macchina) rispetto a prendere il record 100.
Per prevenire questo problema e per riuscire a snellire lo spazio disco occupato dal nostro DB possiamo utilizzare una suite di accesso al DB come phpMyAdmin oppure direttamente il comando SQL.
Con la suite phpMyAdmin, dalla pagina principale del database, selezioniamo le tabelle che vogliamo ottimizzare (per questo esempio usero' un database creato ed utilizzato dal CMS Drupal)

e poi in fondo alla pagina, nelle operazioni da eseguire, selezioniamo Optimize Table/Ottimizza Tabella

Alla fine della operazioni avrete un messaggio come questo:

Se invece non avete una suite come phpMyAdmin a disposizione, ma solo la vecchia ma sempre cara console MySQL, il comando da utilizzare è :
OPTIMIZE TABLE nome_tabella;
Il risultato sarà una cosa simile a
+--------------------------------+--------------+---------------+--------------+
| Table | Op | Msg_type | Msg_text |
+----------------------------- +--------------+---------------+--------------+
| nome_db.nome_tabella| optimize | status | OK | |+-------------------------------+--------------+---------------+--------------+
1 row in set (1 min 13.90 sec)
Notate il tempo di esecuzione nell'ultima riga ? Quando ho preso questo esempio ho ripulito una tabella da tantissime righe inutili, facendola passare da un peso di 285MB ad appena 110MB. E dopo un po' di pulizia il mio DB è passato da 612MB a 327MB. E ancora potrei liberare spazio eliminando i dati di troppo di alcune colonne.
Per vedere lo stato delle vostre tabelle da console, usate il comando:
SHOW TABLE STATUS FROM nome_db
La colonna che ci interessa è Data_free.
Ed ora tutti a compattare i propri database, per un risparmio dei propri bit :D
Post new comment