Optimiser votre base de donnée mysql ?

Nous allons voir ici ce qu’est l’optimisation d’une BDD Mysql (MyISAM). Je vous fourni même a la fin, un petit bout de code en php pour réaliser cette optimisation régulierement.. :)

  • C’est quoi ?
  • Le type de table par défaut de MySQL est MyISAM (Table non transactionnelle: une base de type non transactionnelle lorsqu’une erreur se produit, exécute tout ce qui se trouvait avant l’erreur a l’inverse de la table transactionnelle). Un système très performant, oui, mais qui laisse parfois a désirer quand a la fragmentation – il lui arrive de laisser trainer des morceaux a droite et a gauche. Oui, ils sont infimes et peut nombreux.. n’empêche qu’a force de requêtes (suppression, modification …), il reste des fois des « débris » de donnée qui trainent par ci par là dans la table.

    Il faut donc ranger tout ça parfois ! Inutile de le faire tous les jours, sauf bien sur si votre site a un trafic incroyablement développé.. Personnellement je l’effectue toutes les semaines.

  • Ok, on fait comment ?
  • Bêtement en executant cette instruction mysql:
    > OPTIMIZE TABLE `unetable`, `uneautretable`

    La je suppose que vous vous demandez combien de temps cela va prendre de taper les instructions pour vos 30 tables.. j’ai eu la même réaction. Voici donc, pour vous mon script d’optimisation en php:

    $link = mysql_connect('localhost', 'root', 'motdepasse');
    ?>

    Selectionnez la base a optimiser:

    if(isset($_POST["base"]))
    {
    $table = mysql_list_tables($_POST["base"]);
    //on prépare la requête
    $sql = "OPTIMIZE TABLE ";
    //on recherche toutes les données des tables
    $req = mysql_query('SHOW TABLE STATUS');
    while($data = mysql_fetch_assoc($req))
    {
    //on regarde seulement les tables qui affichent des pertes
    if($data['Data_free'] > 0)
    {
    //et on l'inclut si elle comporte des pertes
    $sql .= '`'.$data['Name'].'`, ';
    }
    }
    //on enlève le ', ' de trop
    $sql = substr($sql, 0, (strlen($sql)-2));
    //et on optimise
    mysql_query($sql);
    echo 'Optimisation de '.$_POST["base"].' terminée..';
    mysql_close();
    }
    ?>

    Bonne optimisation ;)

    Possibly Related Posts:



    This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

    Laisser un commentaire

    IMGP2023IMGP1900IMGP1873IMGP2032IMGP1849IMGP1817IMGP1570IMGP1572IMGP1469IMGP1342IMGP1272IMGP1226