Améliorer les performances avec Zend_Db_Profiler_Firebug

Logo Zend Framework

Le nombre et la qualité des requêtes SQL ont souvent un impact considérable sur les performances d'un site. Le Zend Framework dispose d'un composant très pratique nommé Zend_Db_Profiler_Firebug qui permet d'afficher le temps d'exécution des différentes requêtes exécutées pour afficher une page.

Comme son nom l'indique, Zend_Db_Profiler_Firebug utilise l'excellent Firebug pour afficher ses informations. Vous devez donc l'installer cette extension Firefox ainsi que FirePHP avant de pouvoir utiliser ce composant.

Il faut ensuite ajouter les lignes suivantes dans votre bootstrap :

<?php
if ($this->_environment == 'development') {
    
$profiler = new Zend_Db_Profiler_Firebug('Requêtes');
    
$profiler->setEnabled(true);
    
Zend_Db_Table_Abstract::getDefaultAdapter()->setProfiler($profiler);
}
?>

Vous pouvez également l'activer lors de la création de votre adaptateur de base de données :

<?php
$db 
Zend_Db::factory('Pdo_Mysql',
    array(
        ...
        
'profiler' => array(
            
'enabled' => true,
            
'class' => 'Zend_Db_Profiler_Firebug'
        
)
    )
);
?>

Vous obtiendrez ainsi l'affichage suivant dans la console Firebug :

Les requêtes SQL affichées dans Firebug avec Zend_Db_Profiler_Firebug

Les requêtes qui prennent le plus de temps pourront alors être placées en cache ou optimisées. Pour mémoire, les principaux points à examiner pour améliorer les performances d'une requête SQL sont, par ordre d'importance :

  • L'indexation. Si votre requête est un SELECT, il peut être intéressant d'ajouter des index à vos tables. Utilisez la commande EXPLAIN de MySQL pour analyser votre requête.
  • La normalisation (ou la dénormalisation). La normalisation est théoriquement plus efficace mais si votre requête comporte beaucoup de JOIN, il peut être utile de dénormaliser. Mais attention, les insertions/mise à jour deviennent plus compliquées.
  • Le type et le jeu de caractère des colonnes. Il faut choisir ce qui est le mieux adapté à vos données. La commande ANALYSE de MySQL peut vous fournir de précieuses informations.

Quelques articles et sites qui traitent d'optimisation des requêtes SQL

  • http://www.mysqlperformanceblog.com/
  • http://www.howtodothings.com/computers-internet/how-to-optimize-mysql-queries
  • http://www.techfounder.net/2008/10/12/profiling-queries-with-zend_db-and-optimizing-them-by-hand/

Ajouter un commentaire