Cet article peut intéresser tous les développeurs de sites dynamiques utilisant PHP avec MySQL et dotés d’un fort trafic.
Le but de cet article : vous apprendre à augmenter la vitesse d’affichage des pages en optimisant l’interaction entre PHP et MySQL.
Il y a trois points à prendre en compte afin d’accélérer la liaison PHP-MySQL :
– Réduire le nombre de requêtes SQL
– Optimiser les requêtes
– Alléger la BDD
Ces méthodes sont classées du plus proche du PHP en se rapprochant de MySQL :
Réduire le nombre de requêtes SQL faites par PHP
Évitez au maximum de faire appel à la Base De Données (DBB) : c’est la meilleure façon de ne pas perdre de temps avec cette jonction.
À chaque requête demandée à la BDD, le chargement de la page perd au minimum 0,006 seconde, ce qui semble peu, mais un site à forte audience doit comporter de nombreuses informations afin d’être attractif.
Mettre en cache les blocs d’informations récurrentes
Les sites possédant un bloc menu avec des informations dynamiques calculées à la volée (comme un compteur d’articles dans un menu de catégorie) peuvent être optimisés.
L’idée est de remplacer le code du générateur de menu par l’inclusion d’un fichier HTML vide, ce fichier servira de cache.
<div id="menu"><?php include('cache/menu.html');?></div>
Afin de remplir ce cache, on va créer un fichier PHP permettant de générer le menu et de l’écrire dans le fichier menu.html.
La dernière étape consiste à faire appel au fichier PHP à chaque fois qu’un article est modifié, ajouté ou supprimé.
Optimiser les requêtes SQL
Toutes les requêtes n’ont pas le même temps d’exécution, pour cette raison il est bon d’employer de bonnes pratiques.
Bonnes pratiques
– Si vous devez utiliser un SELECT : demandez à la base de données de renvoyer uniquement les champs dont vous avez besoin, ainsi les SELECT(*) sont à bannir.
– Si vous faites une opération sur une seule ligne : n’oubliez pas la commande SQL : LIMIT 0 , 1
(cela va arrêter l’exécution de la requête dés le premier résultat trouvé)
– Si vous devez compter plusieurs valeurs en une seule requête :
SELECT(SELECT COUNT(champs) FROM table1 AS comptage1, SELECT COUNT(champs2) FROM table3 AS comptage)
– Ne pas utiliser d’apostrophe pour les nombres, cela force le SGBD à faire la conversion chaine en nombre : WHERE `nombre` = 7
– Utilisez la commande LIKE '%recherche'
uniquement pour la recherche à l’intérieur d’une chaine, pour la recherche exacte utilisez la commande =
.
– Sécuriser la BDD en amont avec les requêtes stockées.
– Si vous devez faire beaucoup de fois une requête avec peu de variables qui changent, utilisez les requêtes préparées :
$superrequete= mysql->PREPARE 'INSERT INTO table VALUES (?,?;?)';
$superrequete->BindParam('1er valeur');
$superrequete->BindParam('2er valeur');
$superrequete->BindParam('3er valeur');
$superrequete->execute();
La requête étant préparée, le SGBD a déjà mâché la requête avant de l’exécuter.
Alléger la base de données
Ne pas enregistrer les informations calculables
Lors de la création de votre BDD, ne créez pas de champ contenant le résultat d’une information calculable, par exemple un champ nommé « nombre d’articles » dans la table « catégorie ».
Nettoyer vos tables
Si dans votre base de données, vous avez des tables comportant plus de 25 000 lignes, il est bon d’alléger ces tables.
En pratique cela consiste à se rendre dans la BDD > sélectionner les tables > opérations :
- Vérifier les tables (ce qui élimine les doublons et erreurs éventuelles)
- Optimiser les tables (ce qui permet une vérification de la longueur des champs correspondant aux données)
- Défragmenter les tables (ce qui réorganise les informations des tables sur le serveur)
Suite à ces opérations, les tables seront plus facilement lisibles par votre serveur.
Voila, si vous souhaitez avoir des précisions, n’hésitez pas à commenter.