Améliorer l’interaction entre PHP et MySQL

>>Améliorer l’interaction entre PHP et MySQL

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

Dans la plupart des cas, la perte de temps n’est pas imputable à PHP ou MySQL, mais à un mauvais emploi de ces langages.

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 du temps avec cette jonction.

A chaque requête demandée à la BDD, le chargement de la page perd au minimum 0,006 secondes, 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ée de renvoyer uniquement les champs dont vous avez besoin, ainsi les SELECT(*) sont à bannir.

– Si vous faite 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 à 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 comme 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 25000 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.

 

Si vous connaissez d’autres techniques afin d’optimiser l’interaction entre PHP et MySQL, laissez un commentaire ;)

2014-03-27T11:28:38+00:00 Développement Web|4 Comments

4 Comments

  1. Nic0 12 décembre 2013 at 12 h 47 min

    Tu me parles chinois là, donc en appliquant seulement ces précautions, les pages des sites web s’affichent plus vites ??

  2. MontrezVous 12 décembre 2013 at 20 h 12 min

    Bonjour,
    il n’y a pas que ces conseils à mettre en œuvre pour accélérer un site web,
    je ne parle que de l’interaction entre PHP et MySQL sur des sites à forte audience.

    Ce n’est qu’un point à surveiller parmi tant d’autres, mais pas le plus simple à appliquer et ce sujet méritait un article.

  3. feyder 15 décembre 2013 at 13 h 51 min

    Et pourquoi ne pas faire un cache de la BDD en XML qu’ont met à jour chaque modification et pour la lecture du site on lit que le XML ?

    C’est une idée, qu’en penses tu Mathieu ??

  4. MontrezVous 8 janvier 2014 at 16 h 45 min

    C’est déjà utilisé Feyder, pour cela on utilise plutôt le format JSON que le XML afin d’améliorer le poids du fichier.

    Plus le fichier est lourd, plus cela ralentira l’affichage de la page.

    Ton procédé Feyder est souvent utilisé pour les sites en AJAX afin que l’on puisse utiliser le site de façon autonome entre le navigateur et le fichier XML.

    Ainsi on ne recharge la page que lorsqu’une action modifiant la BDD est commise.

    PS: je dis AJAX mais le jQuery est tout à fait apte à le faire :)

Leave A Comment