


MySQL Expliquez l'analyse pour les informations avancées de performance de requête
Expliquez Analyze est un outil d'analyse des performances de requête introduit dans MySQL 8.0.18. Il aide à localiser les goulots d'étranglement des performances en exécutant réellement des requêtes et des indicateurs d'enregistrement tels que le chronomètre et le nombre de lignes de chaque étape. 1. Il combine le plan d'exécution avec les données de fonctionnement réelles; 2. La sortie contient des informations clés telles que Query_time, Exécution Time, ROWS_PRODUCT_PER_STEP, TIME_PER_STEP et LOOPS; 3. Il peut identifier des problèmes tels que la numérisation complète, les tables temporaires, le tri de fichiers et les boucles de nidification excessives; 4. Il est souvent utilisé pour le débogage de la requête complexe, la comparaison des instructions avec les effets secondaires dans les environnements d'écriture et de test SQL. Lorsque vous l'utilisez, vous devez prêter attention pour éviter d'exécuter directement les opérations d'écriture dans l'environnement de production et combiner les données de sortie pour optimiser l'index et la structure de requête.
EXPLAIN ANALYZE
est un outil très pratique lorsque vous souhaitez creuser dans les problèmes de performances de la requête MySQL. Il peut non seulement vous dire comment la requête est exécutée, mais également afficher la surcharge de temps de chaque étape du processus d'opération réel, vous aidant à localiser rapidement les goulots d'étranglement des performances.

Qu'est-ce que Expliquer Analyze?
EXPLAIN ANALYZE
est une fonctionnalité introduite dans MySQL 8.0.18, combinant l'analyse du plan d'exécution d' EXPLAIN
et les données réelles de performances de requête pendant l'exécution. Contrairement à EXPLAIN
traditionnelle n'affiche uniquement les informations estimées, ANALYZE
exécutera en fait des requêtes et enregistrera des indicateurs clés tels que la consommation de temps réelle et le nombre de lignes à chaque étape.
Il est très simple à utiliser:

Expliquez Analyser Select * dans les commandes où client_id = 123;
Comment comprendre la sortie de l'explication analyse?
Le contenu de la sortie EXPLAIN ANALYZE
est plus détaillé que celui de EXPLAIN
ordinaire, y compris principalement les aspects suivants:
- Query_time : le temps total de toute la requête.
- Temps d'exécution : le temps de la phase d'exécution SQL (à l'exclusion de l'analyse et de l'optimisation).
- ROWS_PRODUMED_PER_STEP : le nombre de lignes générées par chaque étape d'exécution.
- Time_per_step : le temps spécifique prend chaque étape.
- LOOCS : Combien de fois cette boucle de pas (comme les jointures de boucle imbriquée).
La clé pour comprendre ces données est de découvrir l'étape "la plus longue". Par exemple, une table scanne un grand nombre de lignes ou utilise des tables temporaires ou un tri de fichiers, celles-ci peuvent être des problèmes de performances.

Par exemple, si vous voyez un extrait de sortie comme ceci:
-> Index Range SCAN sur les commandes à l'aide de IDX_CUSTERAT_ID (COST = 10,50 ROWS = 100) (Temps réel = 0,050..0.120 lignes = 100 boucles = 1)
Cela signifie que l'efficacité de balayage d'index est assez bonne. Mais si vous voyez:
-> Table Scan sur les commandes (coût = 10000 lignes = 100000) (temps réel = 10.000..50.000 lignes = 100000 boucles = 1)
Ensuite, nous devons déterminer si nous devons ajouter des index ou optimiser les conditions de requête.
Problèmes de performances communs et suggestions d'optimisation
Voici quelques problèmes faciles à trouver en EXPLAIN ANALYZE
et d'optimisation correspondantes:
Table complète
Vérifiez s'il y a un index approprié disponible. Sinon, envisagez d'ajouter des index aux colonnes qui sont souvent utilisées pour l'interrogation.En utilisant des tables temporaires
Se produit généralement en groupe par ou des opérations distinctes. Essayez d'optimiser la sélection de champ ou de régler la logique de tri.Tri de fichiers (à l'aide de fichiers.
Indique que l'index ne peut pas être utilisé pour trier. Cela peut être résolu en établissant un indice composite sur le champ Ordre par champ.Trop de boucles imbriquées
Si l'ensemble de résultats extérieurs est grand, il entraînera l'exécution de la couche intérieure plusieurs fois. Vous pouvez envisager d'écraser la structure de la requête ou d'utiliser des méthodes de connexion plus efficaces (telles que Hash Join, mais le support MySQL est limité).Le temps d'exécution est trop long mais le nombre de lignes retournées
Cela indique qu'il peut y avoir des opérations de calcul ou de filtrage inutiles pour vérifier si les conditions sont raisonnables et éviter la numérisation sans signification de grandes tables.
Utilisez des scénarios et des précautions
Convient pour le débogage des requêtes complexes
Surtout lorsque l'on traite des logiques complexes telles que les associations multiples, les sous-requêtes, le groupe By et l'ordre,EXPLAIN ANALYZE
peut vous aider à trouver le vrai goulot d'étranglement des performances.Faites attention aux effets secondaires de l'exécution
Étant donné queANALYZE
exécutera en fait SQL, s'il est mis à jour, supprimer ou sélectionner avec un impact plus important, il est préférable d'utiliser un compte en lecture seule pour tester d'abord ou l'exécuter dans un environnement de test.Comparaison des effets de différentes méthodes d'écriture
Vous pouvez l'utiliser pour comparer laquelle des deux versions de SQL est plus rapide et quelle consommation de ressources est plus faible, plutôt que de "paraître plus simple".
Fondamentalement, c'est tout. Une fois que vous maîtrisez EXPLAIN ANALYZE
, vous aurez un "miroir en perspective" qui peut clairement voir les véritables performances de la requête. Bien qu'il ne puisse pas vous aider à écrire directement le meilleur SQL, il peut vous faire savoir où améliorer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Le chargement paresseux uniquement les requêtes lors de l'accès aux associations peut facilement entraîner des problèmes n 1, ce qui convient aux scénarios où les données associées ne sont pas déterminées si elles sont nécessaires; 2. Utilisations de chargement d'urgence avec () pour charger les données associées à l'avance pour éviter N 1 requêtes, ce qui convient aux scénarios de traitement par lots; 3. Le chargement d'urgence doit être utilisé pour optimiser les performances, et n 1 des problèmes peuvent être détectés via des outils tels que Laraveldebugbar, et le $ avec l'attribut du modèle est soigneusement utilisé pour éviter les frais généraux de performances inutiles.

Évitez N 1 Problèmes de requête, réduisez le nombre de requêtes de base de données en chargeant à l'avance des données associées; 2. Sélectionnez uniquement les champs requis pour éviter de charger des entités complètes pour enregistrer la mémoire et la bande passante; 3. Utilisez raisonnablement les stratégies de cache, telles que le cache secondaire de la doctrine ou les résultats de requête à haute fréquence de cache de Doctrine; 4. Optimisez le cycle de vie de l'entité et appelez régulièrement () pour libérer la mémoire pour empêcher le débordement de la mémoire; 5. Assurez-vous que l'indice de base de données existe et analysez les instructions SQL générées pour éviter les requêtes inefficaces; 6. Désactiver le suivi automatique des changements dans les scénarios où les modifications ne sont pas nécessaires et utilisez des tableaux ou des modes légers pour améliorer les performances. L'utilisation correcte de l'ORM nécessite de combiner la surveillance SQL, la mise en cache, le traitement par lots et l'optimisation appropriée pour garantir les performances de l'application tout en maintenant l'efficacité du développement.

Le mécanisme de collecte des ordures de PHP est basé sur le comptage de référence, mais les références circulaires doivent être traitées par un collecteur de déchets circulaires périodique; 1. Le nombre de références libère la mémoire immédiatement lorsqu'il n'y a pas de référence à la variable; 2. Référence La référence fait que la mémoire ne peut pas être automatiquement libérée, et cela dépend de GC pour le détecter et le nettoyer; 3. GC est déclenché lorsque la "racine possible" Zval atteint le seuil ou appelle manuellement gc_collect_cycles (); 4. Les applications PHP à long terme devraient surveiller GC_Status () et appeler GC_COLLECT_CYCLES () à temps pour éviter la fuite de mémoire; 5. Les meilleures pratiques incluent d'éviter les références circulaires, en utilisant gc_disable () pour optimiser les zones clés de performance et les objets de déréférence via la méthode Clear () d'Orm.

BREF permet aux développeurs PHP de créer des applications évolutives et rentables sans gérer les serveurs. 1.BREF apporte PHP à Awslambda en fournissant une couche d'exécution PHP optimisée, prend en charge PHP8.3 et d'autres versions, et s'intègre de manière transparente à des frameworks tels que Laravel et Symfony; 2. Les étapes de déploiement incluent: l'installation de BREF à l'aide de composer, configurer Serverless.yml pour définir des fonctions et des événements, tels que les points de terminaison HTTP et les commandes artisanales; 3. Exécutez la commande ServerlessDeploy pour terminer le déploiement, configurez automatiquement Apigeway et générez des URL d'accès; 4. Pour les restrictions de lambda, BREF fournit des solutions.

LaraveloctaneisaperFormance-BoostingPackageThatimproveSerponSetmes etthroughputByservingLaravelApplicationsViaSwoole, OpenSwoole, OrRoadrunner.1.UnlikeTraditionalphp-fpm, qui BootsLaravelEvert

UseArestapitobridgePhpandmlModelsByrunningTheModelinpythonviaflaskorfastapiandCallingitfrompsingCurlorBuzzle.2.Runpythonscripts est ventilateur

ReadonlypropertiesInphp8.2CanlybeassignedonceinthestrustructoratDeclarationandcannotBemodifiedAfterward, applicationmutabilityaThelanguageLevel.2.Toachievedeep-immutability, webutableTypeSlikEarrayinArrayobjectorUSustomymutability, webutilletypeslikearraysinarrayobjectoruseseCustomMutabeColEctionSucha.

LaraveloctaneisusefulForimprovingPerformanceInhigh-Traffic, Low-Latency, Orreal-TimeapplicationsBykeepingtheLarAfrelWorkworkDedInMemoryUsingsWooleorRoDrunner.1.ItexcelsInHigh-TrafficApplicationsByredingServerLoDeRoDResperimethRoughPeSistSentapAsapaSAPA
