20 Résumé de l'optimisation de MySQL
Le contenu de cet article concerne le résumé de l'optimisation de MySQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Avant-propos
De nos jours, les opérations de base de données deviennent de plus en plus le goulot d'étranglement des performances de l'ensemble de l'application, en particulier pour les applications Web. Par conséquent, j'ai compilé quelques suggestions pour l'optimisation de MySQL. J'espère que ces techniques d'optimisation vous seront utiles. Si vous ne parvenez pas à les résumer, vous êtes invités à les ajouter.
Raisons de l'exécution lente de SQL
Vitesse du réseau lente, mémoire insuffisante, faible débit d'E/S, espace disque plein et autres problèmes matériels
Il n'y a pas d'index ou l'index n'est pas valide
Il y a trop d'enregistrements de données dans la table de données
Réglage du serveur et divers réglages de paramètres Cela peut également affecter l'efficacité du SQL écrit par les développeurs
Autres
1. EXPLAIN Analysez votre requête SELECT
Dans de nombreux cas, l'utilisation du mot-clé EXPLAIN peut vous permettre de savoir comment MySQL traite votre instruction SQL, ce qui peut vous aider à analyser votre instruction de requête et peut-être à trouver des optimisations dès que possible. . méthodes et problèmes de performances potentiels. Pour l'utilisation spécifique d'EXPLAIN et la signification de chaque paramètre, veuillez vous référer aux documents concernés.
2. La requête SELECT doit spécifier le nom du champ
La requête SELECT * ajoutera beaucoup de consommation inutile (comme le CPU, les E/S, etc.). cela peut également accroître l’utilisation d’index de couverture. Par conséquent, lors de l'exécution d'une requête SELECT, il est nécessaire de spécifier directement le nom du champ correspondant à interroger à la fin.
3. Lors de l'interrogation d'une donnée, utilisez LIMIT 1
pour réduire les requêtes redondantes, car après avoir spécifié la limite 1, la requête ne continuera plus après l'interrogation d'une donnée, ce qui rend le colonne de type dans EXPLAIN Pour atteindre le type const, l'instruction de requête est meilleure.
4. Créez un index pour le champ WHERE recherché
Généralement, nous définirons une clé primaire pour chaque table, et l'index n'est pas nécessairement la clé primaire. S'il y a un champ dans votre table que vous utilisez toujours pour les requêtes et les recherches WHERE, et qu'il est plus lu qu'écrit, veuillez créer un index pour celui-ci. Si vous souhaitez en savoir plus sur les principes de l'indexation, vous pouvez obtenir des informations pertinentes. être trouvé.
5. N'utilisez jamais ORDER BY RAND()
Si vous souhaitez obtenir des données de manière aléatoire, peut-être que le premier vous dira directement d'utiliser des nombres aléatoires. N'oubliez pas qu'à ce moment, vous devez contrôler. votre cerveau de continuer à penser dans cette direction et d'arrêter cette terrible pensée. Car ce type de requête n'a aucun bénéfice sur les performances de la base de données (consommateur de CPU). L'une des meilleures solutions consiste à trouver d'abord le nombre N de données, puis à utiliser LIMIT N, 1
pour effectuer une requête comme celle-ci.
6. Assurez-vous que chaque table a un identifiant de clé primaire
Nous devons développer une habitude chaque fois que nous créons une nouvelle table, nous devons concevoir un champ d'identification pour celle-ci et en faire le. clé primaire, de préférence de type INT (certains utilisent également UUID), et définissez le champ ID sur l'indicateur AUTO_INCREMENT.
8. Utilisez NOT NULL autant que possible
Ne pensez pas que NULL n'a pas besoin d'espace. Le fait est que NULL a également besoin d'espace supplémentaire. Peut-être que beaucoup de gens ne l'ont pas remarqué mais l'ont fait. Je l'ai rencontré. Les champs NULL sont dans Lors de l'interrogation et de la comparaison, c'est plus gênant. Bien sûr, si vous avez vraiment besoin de NULL, alors pas de problème, utilisez-le simplement. Sinon, il est recommandé d'utiliser NOT NULL.
8. Choisissez le moteur de stockage approprié
Il existe deux moteurs de stockage, MyISAM et InnoDB, dans MySQL. Les deux ont leurs propres avantages et inconvénients, nous devons donc comprendre les différences entre les deux. puis prenez la meilleure décision. Des choix appropriés, par exemple, InnoDB prend en charge les transactions mais pas MyISAM, les requêtes MyISAM sont plus rapides qu'InnoDB, etc. en bref, si vous ne savez pas quoi choisir, utilisez InnoDB.
9. Enregistrez l'adresse IP sous UNSIGNED INT
Lorsque vous rencontrez le besoin de stocker l'adresse IP, la première pensée de nombreuses personnes est de stocker le type de chaîne VARCHAR (15), et vous ne le feriez pas. pensez à utiliser le type entier INT pour le stocker ; si vous utilisez le type entier pour le stocker, cela ne prend que 4 octets et vous pouvez avoir des champs de longueur fixe, ce qui vous apportera des avantages dans les requêtes.
10. Essayez de ne pas juger la valeur nulle d'un champ lors de la requête WHERE
Nous savons tous que lorsque nous jugeons un champ comme nul, cela sera plus lent. un jugement amènera le moteur à abandonner l’utilisation de tous les index existants et à effectuer une recherche par analyse de table complète.
11. Essayez de ne pas utiliser de requête floue avec le préfixe % LIKE
Requête floue, nous la rencontrons souvent dans le développement quotidien, mais je pense que beaucoup de gens utilisent directement LIKE '%key_word%'
ou LIKE '%key_word'
Rechercher dans de cette façon, ces deux méthodes de recherche entraîneront l'échec de l'index et effectueront une recherche par analyse de table complète. Si vous souhaitez résoudre la requête floue ci-dessus, la réponse est d'utiliser "utiliser l'index de texte intégral". Si vous êtes intéressé par une utilisation spécifique, vous pouvez vérifier les informations vous-même.
12. Évitez d'effectuer des opérations d'expression sur les champs lors des requêtes WHERE
Par exemple, dans l'instruction de requête SELECT id FROM table WHERE num * 2 = 50;
, une telle requête effectuera une opération arithmétique consistant à multiplier le numéro du champ par 2. Provoque un échec de l’index.
14. Réduisez les tris inutiles
Les opérations de tri consommeront plus de ressources CPU, donc la réduction des tris inutiles peut réduire les performances SQL lorsque le taux de réussite du cache est élevé et le temps de réponse des E/S est suffisant.
14. Il est recommandé d'utiliser JOIN au lieu d'une sous-requête
Certaines personnes diront que les performances de JOIN ne sont pas très bonnes, mais elles présentent toujours de grands avantages en termes de performances par rapport à la sous-requête. Plus précisément, vous pouvez en apprendre davantage sur les problèmes liés au plan d’exécution d’une sous-requête.
15. Évitez la conversion de type implicite
La conversion de type fait principalement référence à la conversion de type qui se produit lorsque le type du champ dans la clause WHERE est incohérent avec le type du paramètre transmis ; Parce que si le type de données que nous transmettons n'est pas cohérent avec le type de champ, MySQL peut effectuer des opérations de conversion de type sur les données que nous transmettons, ou il peut ne pas les traiter et les transmettre directement au moteur de stockage pour traitement. , l'index peut ne pas pouvoir être traité. Problèmes de plan d'exécution causés par les conditions d'utilisation.
16. Évitez les types de champs incohérents dans les requêtes multi-tables
Lorsque nous rencontrons une requête conjointe de plusieurs tables, lorsque nous concevons la structure de la table, essayez de garder les champs associés de la table cohérents avec la table et les index doivent être définis. Dans le même temps, lorsque vous effectuez des requêtes de connexion multi-tables, essayez d'utiliser la table avec un petit jeu de résultats comme table de pilotage.
17. Il est recommandé d'activer le cache de requêtes
La plupart des serveurs MySQL ont le cache de requêtes activé. C'est l'un des moyens les plus efficaces d'améliorer les performances, car le cache de requêtes est activé. automatiquement traité par le moteur de base de données MySQL. Lorsque plusieurs des mêmes requêtes sont exécutées plusieurs fois, ces résultats de requête seront placés dans un cache, de sorte que les requêtes identiques suivantes n'auront pas besoin d'exploiter la table mais d'accéder directement aux résultats mis en cache.
18. Utilisez UNION au lieu d'une table temporaire
La requête UNION peut fusionner deux ou plusieurs résultats de requête SELECT en une seule requête, il n'est donc pas nécessaire de créer une table temporaire pour la terminer. Il convient de noter que le nombre de champs dans toutes les instructions SELECT utilisant UNION doit être le même.
19. Utilisez les requêtes IN avec prudence
Soyez prudent avec les requêtes IN et NOT IN, car elles peuvent conduire à une analyse complète de la table, et pour les valeurs continues, n'utilisez pas IN si vous le pouvez. utiliser ENTRE.
20. Bienvenue pour ajouter
Conclusion
Il s'agit principalement de considérer l'optimisation du point de vue de la requête, ainsi que certaines sous-tables, la technologie de partitionnement et la lecture-écriture. séparation ; l'optimisation ci-dessus. Si les points mentionnés ci-dessus ne sont pas en place, veuillez comprendre qu'il existe de nombreux endroits où MySQL peut être optimisé. D'autres suggestions d'optimisation sont les bienvenues, merci.
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

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.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

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)

1. Fonctionnalités de base 1. Cela commence par un verrou optimiste, et si les conflits de verrouillage sont fréquents, il est converti en verrou pessimiste. 2. Cela commence par une implémentation de verrouillage légère, et si le verrou est maintenu pendant une longue période, il est activé. est converti en un verrou lourd. 3. La stratégie de verrouillage tournant qui est la plus probablement utilisée lors de l'implémentation de verrous légers 4. C'est un verrou injuste 5. C'est un verrou réentrant 6. Ce n'est pas un verrou en lecture-écriture 2. La JVM synchronisera le processus de verrouillage. Les verrous sont divisés en états sans verrouillage, verrouillage biaisé, verrouillage léger et verrouillage lourd. Il sera mis à niveau séquentiellement en fonction de la situation. Le verrouillage biaisé suppose que le protagoniste masculin est un verrou et que le protagoniste féminin est un fil. Si seulement ce fil utilise ce verrou, alors le protagoniste masculin et le protagoniste féminin peuvent vivre heureux pour toujours même s'ils n'obtiennent pas d'acte de mariage (en évitant les hauts). (opérations de coûts). Mais le second rôle féminin apparaît.

1. Le concept de verrou dans Java Spin lock : Lorsqu'un thread acquiert un verrou, si le verrou a été acquis par un autre thread, alors le thread attendra en boucle, puis continuera à juger si le verrou peut être acquis avec succès jusqu'à ce que il est acquis. Le verrou sortira de la boucle. Verrouillage optimiste : en supposant qu'il n'y ait pas de conflit, si les données s'avèrent incohérentes avec les données précédemment acquises lors de la modification des données, les dernières données seront lues et la modification sera réessayée. Verrouillage pessimiste : supposez que des conflits de concurrence se produiront, synchroniserez toutes les opérations liées aux données et commencerez le verrouillage à partir du moment où les données sont lues. Verrou exclusif (écriture) : ajoutez un verrou en écriture à la ressource. Le thread peut modifier la ressource, mais les autres threads ne peuvent pas la verrouiller à nouveau (écriture unique). Verrou partagé (lecture) : après avoir ajouté un verrou en lecture à une ressource, celui-ci peut uniquement être lu mais pas modifié. Les autres threads ne peuvent ajouter que des verrous en lecture et ne peuvent pas ajouter de verrous en écriture (plusieurs). Voir comme S

Résumé de l'utilisation de synchronisé en Java 1. Lorsque synchronisé est utilisé comme modificateur de fonction, l'exemple de code est le suivant : Publicsynchronizedvoidmethod(){//….} Il s'agit de la méthode de synchronisation. Alors, quel objet est synchronisé verrouillé à ce moment ? Ce qu'il verrouille appelle cet objet méthode synchronisée. En d'autres termes, lorsqu'un objet P1 exécute cette méthode de synchronisation dans différents threads, ils formeront une exclusion mutuelle pour obtenir un effet de synchronisation. Cependant, un autre objet P2 généré par la Classe à laquelle appartient cet objet peut arbitrairement appeler cette méthode en ajoutant le mot-clé synchronisé. L'exemple de code ci-dessus, etc.

1. Expliquez que synchronisé est notre méthode de synchronisation la plus couramment utilisée et qu'il existe trois manières principales de l'utiliser. 2. Exemple//Synchronisation de méthode de classe générale synchroniséepublidvoidinvoke(){}//Synchronisation de méthode statique de classe synchroniséepublicstaticvoidinvoke(){}//Synchronisation de bloc de code synchronisé(objet){}La différence entre ces trois méthodes est que les objets synchronisés sont différents. Les classes ordinaires synchronisent l'objet lui-même, les méthodes statiques synchronisent la classe elle-même et les blocs de code synchronisent les objets que nous remplissons entre parenthèses. Quelles collections existe-t-il en Java ?

Préparation des outils Avant de parler formellement du principe de la synchronisation, parlons d'abord des verrous de rotation, car les verrous de rotation jouent un rôle important dans l'optimisation de la synchronisation. Pour comprendre les verrous de rotation, nous devons d’abord comprendre ce qu’est l’atomicité. Ce qu'on appelle l'atomicité signifie simplement que chaque opération n'est pas effectuée ou que tout faire signifie qu'elle ne peut pas être interrompue pendant l'opération. Par exemple, pour en ajouter une aux données variables, il y a les trois étapes suivantes : ajouter des données Charger. de la mémoire dans le registre. Ajoutez-en un à la valeur des données. Écrivez le résultat en mémoire. L'atomicité signifie que lorsqu'un thread effectue une opération d'incrémentation, il ne peut pas être interrompu par d'autres threads uniquement lorsque ce thread termine ces trois processus.

Résumé : Le mot clé synchronisé est fourni en Java pour garantir qu'un seul thread peut accéder au bloc de code synchronisé. Puisque le mot-clé synchronisé a été fourni, pourquoi l'interface Lock est-elle également fournie dans le package Java SDK ? Est-ce une réinvention inutile de la roue ? Aujourd’hui, nous discuterons ensemble de cette question. Le mot-clé synchronisé est fourni en Java pour garantir qu'un seul thread peut accéder au bloc de code synchronisé. Puisque le mot-clé synchronisé a été fourni, pourquoi l'interface Lock est-elle également fournie dans le package Java SDK ? Est-ce une réinvention inutile de la roue ? Aujourd’hui, parlons-en ensemble

Qu'est-ce que Synchronized ? Les lecteurs Java ne sont pas étrangers au mot-clé synchronisé. Il peut être vu dans divers codes sources de middleware ou de codes sources du JDK. Pour les lecteurs qui ne sont pas familiers avec synchronisé, ils savent seulement que le mot-clé synchronisé doit être utilisé en multi. -le threading synchronisé peut assurer la sécurité des threads. On l'appelle : verrouillage mutex (un seul thread peut s'exécuter en même temps, les autres threads attendront), également appelé : verrouillage pessimiste (un seul thread peut s'exécuter en même temps, les autres threads attendront). vous aider à l'implémenter, les développeurs n'ont qu'à utiliser le mot-clé synchronisé. Lors de son utilisation, vous devez utiliser un objet comme mutex pour le verrou

Java fournit d'autres modificateurs pour fournir des fonctionnalités au-delà de la visibilité. Ces modificateurs sont appelés modificateurs de non-accès. Les membres déclarés comme statiques sont communs à toutes les instances de la classe. Les membres statiques sont des membres de niveau classe stockés dans la mémoire de classe. Final Ce modificateur est utilisé pour restreindre d'autres modifications à une variable, une méthode ou une classe. La valeur d'une variable déclarée finale ne peut plus être modifiée une fois qu'elle a obtenu sa valeur. La méthode Final ne peut pas être substituée dans une sous-classe, et une sous-classe de la classe Final ne peut pas non plus être créée. Résumé Ce modificateur peut être utilisé avec une classe ou une méthode. Vous ne pouvez pas appliquer ce modificateur aux variables et aux constructeurs. Les méthodes déclarées abstraites doivent être modifiées dans les sous-classes. Vous ne pouvez pas instancier une classe déclarée abstraite. Synchrone Ce modificateur est utilisé pour contrôler plusieurs threads
