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.

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 de la 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, qui 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 . C’est pourquoi 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. 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)

– N’utilisez pas d’apostrophe pour les nombres, cela force le SGBD à faire la conversion chaîne en nombre : WHERE `nombre` = 7

– Utilisez la commande LIKE '%recherche' uniquement pour la recherche à l’intérieur d’une chaîne. Pour la recherche exacte, utilisez la commande =.

– Sécurisez 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();

Le SGBD a alors 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 l’élaboration 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 les tables

Si dans votre base de données, vous avez des tables comportant plus de 25 000 lignes, il est bon de les alléger.
En pratique, cela consiste à se rendre dans la BDD > sélectionner les tables > opérations :

  • Vérifier les tables (élimine les doublons et erreurs éventuelles)
  • Optimiser les tables (vérifie la longueur des champs correspondant aux données)
  • Défragmenter les tables (réorganise les informations des tables sur le serveur)

Suite à ces opérations, les tables seront plus facilement lisibles par votre serveur.

Si vous souhaitez avoir des précisions, n’hésitez pas à commenter !