Sitios web

Cómo optimizar las tablas de una base de datos MySQL

Las tablas almacenadas en una base de datos MySQL deben estar siempre optimizadas. Ello repercute en un mayor rendimiento. A continuación explicamos lo que hay que hacer para llevar a cabo la optimización sin utilizar phpMyAdmin, el popular gestor de bases de datos.

Cómo optimizar las tablas de una base de datos MySQL

La mayoría de los sitios web actuales utilizan un gestor de contenidos, que a su vez emplea una base de datos, en el formato MySQL la mayoría, para almacenar y mostrar los contenidos. Cada vez que se hace una solicitud desde un navegador web, y siempre que no esté activado ningún programa de caché, el sistema accede a las tablas para procesar los datos.

Aunque el caché esté activado la base de datos está en continuo procesamiento si el sitio tiene muchas visitas. Continuamente se está guardando y mostrando información. Las tablas de la base de datos se fraccionan y el procesamiento de información se hace más lento y tedioso.

Existen algunas formas de optimizar las tablas con residuo a depurar. La más utilizada y tediosa es accediendo a las bases a través de un gestor, como phpMyAdmin, marcar las tablas a depurar y pulsar sobre la opción de Optimizar la tabla. Pero hay algunas más.

Script para optimizar bases de datos

A continuación mostramos un script en PHP, que debemos guardar en un directorio de nuestro sitio web, que se ocupa de optimizar las tablas de la base de datos alojada en nuestro servidor MySQL.

Después de indicar los datos de acceso al servidor, debemos subir el script, a través de FTP, a nuestro servidor web con el nombre que queramos, por ejemplo, optimizar.php.

Podemos ejecutar dicho script manualmente desde el navegador web siempre que queramos, o crear un cronjob para la ejecución automática. En este segundo caso tendremos que darle al script los permisos adecuados: 755 o 777.

Este es el script:

<?php
echo '<pre>' . "\n\n";
set_time_limit( 100 );

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$start = $time;

//Connection variables :
$h = 'servidor';
$u = 'nombre_usuario';
$p = 'contraseña';

$dummy_db = 'mysql';

$db_link = mysql_connect($h,$u,$p);

$res = mysql_db_query($dummy_db, 'SHOW DATABASES', $db_link) or die('No se pudo conectar: ' . mysql_error());
echo 'Encontradas '. mysql_num_rows( $res ) . ' bases de datos' . "\n";
$dbs = array();
while ( $rec = mysql_fetch_array($res) )
{
$dbs [] = $rec [0];
}

foreach ( $dbs as $db_name )
{
echo "Base de datos : $db_name \n\n";
$res = mysql_db_query($dummy_db, "SHOW TABLE STATUS FROM `" . $db_name . "`", $db_link) or die('Llamada : ' . mysql_error());
$to_optimize = array();
while ( $rec = mysql_fetch_array($res) )
{
if ( $rec['Data_free'] > 0 )
{
$to_optimize [] = $rec['Name'];
echo $rec['Name'] . ' necesita optimización' . "\n";
}
}
if ( count ( $to_optimize ) > 0 )
{
foreach ( $to_optimize as $tbl )
{
mysql_db_query($db_name, "OPTIMIZE TABLE `" . $tbl ."`", $db_link );
}
}
}

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 6);
echo 'Analizado en ' . $total_time . ' segundos' . "\n\n";
?>

Antes de subirlo al servidor web con un cliente FTP, no te olvides de cambiar servidor, nombre_usuario y contraseña por los que corresponden a tu servidor MySQL.

Conclusión

Lo normal, si el script tiene la forma que indicamos, no debe haber problemas. Pero hay que tener cuidado, no vayamos a efectuar el proceso y cometer un fallo. Lo normal es que antes de llevar a cabo la acción es conveniente efectuar una copia de la base de datos con el fin de corregir los posibles fallos.

Fabriciano González

Amante de la informática y de Internet entre otras muchas pasiones. Leo, descifro, interpreto, combino y escribo. Lo hago para seguir viviendo y disfrutando. Trato de dominar el tiempo para que no me esclavice.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.