Position actuelle: Accueil> Derniers articles> Comment éviter les problèmes de performances à l'aide de mysqli_result :: fetch_column dans une boucle

Comment éviter les problèmes de performances à l'aide de mysqli_result :: fetch_column dans une boucle

gitbox 2025-05-26

Qu'est-ce que MySQLI_RESULT :: Fetch_Column ?

Fetch_Column est une nouvelle méthode ajoutée à la classe MySQLI_RESULT dans PHP 8.1. Il est utilisé pour obtenir directement les valeurs d'une seule colonne dans l'ensemble de résultats et éviter un accès supplémentaire sur tableau. Il a une syntaxe simple et est similaire à FetchColumn dans PDO. Des exemples d'utilisation sont les suivants:

<code> $ mysqli = new mysqli ("gitbox.net", "utilisateur", "pass", "base de données"); $ result = $ mysqli-> query ("SELECT NAME FROM Users");

while ($ name = $ result-> fetch_column ()) {
Echo $ nom. "\ n";
}
</code>

Dans cet exemple, chaque boucle récupère la première colonne (la valeur par défaut est la 0e colonne) des données de la ligne actuelle via fetch_column .


Les appels fréquents pour Fetch_Column seront-ils lents?

En théorie, Fetch_Column déclenchera une ligne de données à lire à partir du code C sous-jacent et renvoie la valeur de la colonne spécifiée. Les frais généraux d'un seul appel sont très petits, mais si vous appelez beaucoup de données à plusieurs reprises dans une boucle, les frais généraux accumulés seront importants.

Les principaux facteurs d'influence comprennent:

  • Taille des données : plus il y a de données, plus il y a d'appels, plus les frais généraux sont élevés.

  • Latence du réseau et les performances de la base de données : lorsque les données sont fréquemment attirées dans l'environnement de la demande du réseau, le retard sera superposé.

  • Efficacité de traitement des clients : les boucles et la méthode de PHP s'appellent eux-mêmes ont également des frais généraux.

Pour donner un exemple extrême, si vous souhaitez traiter des dizaines de milliers d'enregistrements, chaque appel Fetch_Column séparément, le temps de réponse global augmentera considérablement.


Comment optimiser?

  1. Obtenez toutes les données à la fois

Si le volume de données le permet, il est recommandé d'utiliser fetch_all ou fetch_all (mysqli_num) en même temps, puis parcourez PHP. Cela réduit les frais généraux de plusieurs appels de méthode et interactions réseau.

Exemple:

<code> $ result = $ mysqli-> query ("SELECT NAME FROM Users"); $ allNames = $ result-> fetch_all (mysqli_num);

foreach ($ allNames as $ row) {
Echo $ row [0]. "\ n";
}
</code>

  1. Prenez uniquement les colonnes requises

Essayez de sélectionner uniquement les champs requis dans les requêtes SQL pour réduire la quantité de transmission et de traitement des données.

  1. Évitez les requêtes répétées en boucles

Si vous avez besoin d'utiliser les mêmes données plusieurs fois, envisagez d'abord de cache les résultats pour éviter d'exécuter plusieurs fois SQL.

  1. Utiliser des déclarations de prétraitement

Les déclarations de prétraitement sont plus sûres et fonctionnent mieux pour un grand nombre de requêtes complexes.


résumé

L'utilisation fréquente de mysqli_result :: fetch_column dans les boucles n'est pas extrêmement lente, mais lorsque le volume de données est important, la surcharge apportée par des appels cumulatifs ne peut pas être ignorée. En réduisant le nombre d'appels de méthode, en obtenant des données en même temps et en concevant raisonnablement SQL, les performances et la vitesse de réponse peuvent être considérablement améliorées.

J'espère que cet article peut vous aider à mieux comprendre et optimiser l'extraction des données de la base de données dans PHP.