Dati informativi di una tabella in MySql


Mysql ha una funzione molto bella che se sfruttata a dovere ci torna utile per alcune ottimizzazioni.

Uso: SHOW TABLE STATUS [FROM `database`] [LIKE ‘pattern’];
Descrizione: SHOW TABLE STATUS ritorna informazioni sulla tabella:

Name (Nome della tabella).
Version (Versione del file .frm della tabella).
Engine (Engine della tabella).
Rows (Numero di righe nella tabella).
Row_format (Il formato della riga).
Avg_row_length (Media di grandezza della riga).
Data_length (Lunghezza dei dati)[/i].
Max_data_length (Massima lunghezza dei dati).
Index_length (Lunghezza del file index).
Data_free (Numero byte non usati).
Auto_increment (Prossimo valore di auto increment).
Create_time (Tempo creazione tabella).
Update_time (Tempo update tabella).
Check_time (Tempo checked tabella).
Collation (character set e collation della tabella).
Checksum (valore checksum della tabella).
Create_options (opzioni extra usate con CREATE TABLE).
Comment (commenti usati nella creazione della tabella).

Possiamo considerare questo comando alla stregua di un SQL, di fatto lo possiamo lanciare anche da PHP.

Allora lanciamo l’interrogazione così:
<?php
$query = mysql_query("SHOW TABLE STATUS FROM `database`;"); ?>

 Di tutti i dati che ci restituisce, uno è di particolare interesse, il data_free, indica infatti in numero di byte che sono stati allocati dalla tabella e che non sono occupati dai dati, se lo spazio libero è tanto allora la nostra tabella sarà rallentata.

In questo post sulla manutenzione delle tabelle in Mysql  parlavo di una funzione:
OPTIMIZE TABLE nometabella;

questa funzione serve proprio ad azzerare lo spazio libero. Allora come evoluzione della nostra interrogazione possiamo intercettare proprio quelle tabelle che hanno il valore data_free maggiore di 0:

<?php
$query = mysql_query("SHOW TABLE STATUS FROM `database` WHERE data_free>0;"); ?>

 Ora l’interrogazione nel campo Name ci restituirà tutte quelle tabelle che sono da ottimizzare, volendo si può implementare uno script che ogni volt ache viene lanciato ottimizza le tabelle che hanno bisogno di una sistematina eccolo qui:

<?php
$query = mysql_query("SHOW TABLE STATUS FROM `database` WHERE data_free>0;");
while ($info = mysql_fetch_array($query)) {
  $opt_query = mysql_query("OPTIMIZE TABLE  `".$info['name']."`;");

}
?> 

Molto stringato ma spero sia chiaro.

Dati informativi di una tabella in MySql ultima modifica: 2008-06-25T09:48:25+00:00 da Enrico

Comments are closed.