⊗ppSpOtSQ 80 of 83 menu

Optimisation de l'utilisation des requêtes SQL en PHP

L'exécution de requêtes SQL vers une base de données est une opération très lente. C'est pourquoi il faut chercher à minimiser le nombre de requêtes envoyées à la base.

L'erreur la plus courante est l'exécution d'une multitude de requêtes SQL dans une boucle, alors qu'il existe des requêtes alternatives permettant de réaliser l'objectif souhaité en une seule commande.

Regardons un exemple.

Supposons que nous ayons un tableau contenant les id d'enregistrements dans la base de données et que nous devions supprimer les enregistrements ayant ces id.

Sans trop réfléchir, on pourrait écrire cette construction "merveilleuse" :

<?php $ids = [1, 2, 3, 4, 5]; // tableau pour la suppression foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Le problème de ce code est que de nombreuses requêtes sont exécutées dans la boucle. Imaginez que le tableau contienne 100 éléments - 100 requêtes seront exécutées vers la base !

Le piège particulier de la tâche décrite est que lors du développement du site, la base de données est petite et les requêtes s'exécutent très rapidement. Cependant, au fur et à mesure que le site fonctionne sur l'hébergement, la base va grandir, les requêtes s'exécuteront de plus en plus lentement, et cela peut aller jusqu'au point où, à cause de l'exécution d'une centaine de requêtes dans une boucle, le site mettra plus d'une minute à charger !

En faisant très peu d'efforts, on peut faire en sorte qu'une seule requête soit exécutée, comme ceci :

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // on obtient la chaîne '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Optimisez le code ci-dessous :

<?php $arr = [1, 2, 2, 4, 5]; $res = []; for ($i = 1; $i < count($arr); $i++) { $note = mysqli_query($link, "SELECT * FROM users WHERE id=$id"); for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row); $res[] = $data; } var_dump($res); ?>
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser