Lorsque vous utilisez des bases de données MySQL dans PHP, il est souvent nécessaire d'extraire les données des résultats de la requête. mysqli_result :: fetch_assoc et mysqli_fetch_row sont deux moyens couramment utilisés pour obtenir des données de ligne de résultat de requête. Bien qu'ils soient tous en mesure de retourner les ensembles de résultats de requête, ils diffèrent en performances, en format de valeur de retour et en scénarios applicables. Dans cet article, nous explorerons les différences de performance entre les deux, analyserons leurs caractéristiques respectives et discuterons de la méthode la plus appropriée lors de l'interrogation de grands volumes de données.
mysqli_result :: fetch_assoc :
La méthode fetch_assoc renvoie un tableau associatif, où la clé du tableau est le nom de la colonne et la valeur est la valeur de la colonne correspondante. Cette approche est généralement plus facile à comprendre et à utiliser car elle permet un accès direct aux données résultantes via des noms de colonne.
Exemple:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">" - Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
</span></span>
mysqli_fetch_row :
La méthode fetch_row renvoie un tableau indexé d'index numériques, c'est-à-dire que les valeurs de colonne sont organisées en index numériques dans l'ordre dans lequel ils sont dans les résultats de la requête. Cette méthode est légèrement plus efficace que fetch_assoc , car elle ne nécessite pas de création d'associations avec les noms de colonne.
Exemple:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_row</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] . </span><span><span class="hljs-string">" - Name: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>] . </span><span><span class="hljs-string">"<br>"</span></span><span>;
}
</span></span>
En termes de performances, MySQLI_FETCH_ROW est généralement plus économique que MySQLI_RESULT :: fetch_assoc . En effet, Fetch_Row renvoie un simple tableau d'index numérique, tandis que Fetch_assoc renvoie un tableau associatif qui nécessite plus de mémoire pour stocker le mappage des noms de colonne aux valeurs de colonne.
Plus précisément, le tableau renvoyé par fetch_assoc contient chaque fois la chaîne de noms de colonnes, tandis que fetch_row renvoie simplement l'index numérique. Cela signifie que Fetch_Row est plus rentable dans l'utilisation de la mémoire, en particulier lorsque les résultats de la requête contiennent un grand nombre de colonnes, l'écart est plus évident.
En termes de vitesse d'exécution, mysqli_fetch_row est également légèrement meilleur que mysqli_result :: fetch_assoc . En effet, fetch_assoc prend plus de temps pour traiter le mappage des noms de colonnes aux clés de réseaux lors de la création de tableaux associatifs. fetch_row renvoie les valeurs de la colonne directement dans l'ordre, sans traitement de mappage supplémentaire, il y a donc un léger avantage de vitesse.
Bien sûr, cette différence de performance peut ne pas être évidente lorsque vous traitez de petits ensembles de données, mais lorsque la quantité de données est très importante, les avantages de fetch_row sont encore plus évidents, en particulier lorsque le fonctionnement fréquent de grandes quantités de données est nécessaire.
Facile à comprendre et à entretenir : le tableau associatif renvoyé par fetch_assoc rend plus intuitif pour accéder aux données de colonne. Les noms de colonne sont les clés des tableaux qui sont très faciles à comprendre et à utiliser pour les développeurs, en particulier lorsqu'ils traitent des résultats de requête complexes.
Scénarios où les noms de colonne sont nécessaires : Fetch_assoc convient plus lorsqu'il existe de nombreuses colonnes dans le résultat de la requête et que les développeurs doivent accéder aux données via des noms de colonne plutôt que des index numériques. Surtout lors de la lecture de grandes tables de données contenant plusieurs colonnes, les données peuvent être rapidement positionnées via des noms de colonnes.
Exigences de haute performance : MySQLI_FETCH_ROW convient aux scénarios où le volume de données est énorme en raison de son empreinte de mémoire moins de sa mémoire et de son efficacité d'exécution plus élevée. Surtout lorsque des millions de lignes de données doivent être traitées, Fetch_Row peut réduire considérablement l'utilisation de la mémoire et augmenter la vitesse de traitement des requêtes.
Lorsque l'index de colonne est fixé : fetch_row est plus concis et efficace lorsque le développeur a déterminé l'ordre de colonne des résultats de la requête et n'a pas besoin d'utiliser les noms de colonne.
Les performances deviennent un facteur crucial lorsqu'ils sont confrontés à de grandes requêtes de données. Étant donné que MySQLI_FETCH_ROW présente plus d'avantages dans l'empreinte de la mémoire et la vitesse d'exécution, il s'agit généralement d'un meilleur choix pour interroger de grands volumes de données, en particulier dans les scénarios où les données doivent être accessibles séquentiellement.
Cependant, s'il existe de nombreuses colonnes dans la requête et les données doivent être accessibles fréquemment en fonction du nom de la colonne, bien que MySQLI_RESULT :: fetch_assoc soit légèrement inférieur en performances, la lisibilité et la maintenance de son code sont toujours un avantage qui ne peut pas être ignoré.
Comparaison des performances : mysqli_fetch_row est généralement plus efficace que mysqli_result :: fetch_assoc , en particulier lors de l'interrogation de grands volumes de données.
Scénarios applicables : mysqli_result :: fetch_assoc convient plus pour les scénarios avec un accès supplémentaire sur les noms de colonne, et MySQLI_FETCH_ROW convient plus à une requête de données importante qui nécessite une utilisation efficace de la mémoire et une optimisation des performances.
Recommandation : Si les performances sont la première priorité et que vous n'avez pas besoin d'accéder aux données via des noms de colonne, il est recommandé d'utiliser MySQLI_Fetch_Row . Si la commodité de lisibilité et de développement est plus importante et que la quantité de données est relativement faible, MySQLI_RESULT :: Fetch_assoc serait un meilleur choix.
Étiquettes associées:
mysqli_result