Maison > base de données > tutoriel mysql > Comment optimiser l'instruction SQL ?

Comment optimiser l'instruction SQL ?

青灯夜游
Libérer: 2019-04-20 09:53:54
original
7647 Les gens l'ont consulté

Plusieurs méthodes pour optimiser les instructions SQL incluent : 1. Unifier le format des instructions SQL ; 2. Optimiser les requêtes et éviter les analyses de tables complètes ; 3. Les instructions SQL doivent être concises 4. Envisager d'utiliser des « tables temporaires » pour stocker temporairement les instructions SQL ; résultats ; 5. Essayez d’éviter les opérations de transaction volumineuses ; 6. Essayez d’éviter de renvoyer de grandes quantités de données au client. L'article suivant vous présentera quelques détails, j'espère qu'il vous sera utile.

Comment optimiser l'instruction SQL ?

Au début de notre projet de développement, en raison de la quantité relativement faible de données métier, l'impact de l'efficacité d'exécution de certains SQL sur l'efficacité d'exécution du programme n'était pas évident, et le personnel de développement, d'exploitation et de maintenance est également impossible de juger de l'efficacité de SQL sur l'efficacité de fonctionnement du programme, c'est pourquoi une optimisation spéciale de SQL est rarement effectuée à mesure que le temps s'accumule et que la quantité de données commerciales augmente. L'impact de l'efficacité de l'exécution de SQL sur l'efficacité d'exécution du programme augmente progressivement. À ce stade, l'optimisation de SQL est nécessaire.

Plusieurs méthodes pour optimiser les instructions SQL :

1. Unifier le format des instructions SQL

Pour les deux instructions SQL suivantes, de nombreuses personnes pensent qu'elles sont identiques, mais l'optimiseur de requêtes de base de données pense qu'elles sont différentes.

Quantity 

select * from dual

Quantity 

select * From dual

Bien que le cas soit seulement différent, l'analyseur de requêtes considère qu'il s'agit de deux instructions SQL différentes et doit être analysée deux fois. . Générez 2 plans d'exécution. Par conséquent, en tant que programmeur, vous devez vous assurer que la même instruction de requête est cohérente partout, même un espace de plus ne fonctionnera pas !

2. Utilisez * avec parcimonie , remplacez "*" par une liste de champs spécifique et ne renvoyez aucun champ inutilisé.

3. Pour optimiser la requête, les analyses de tables complètes doivent être évitées autant que possible

1). commander par.

2) Essayez d'éviter de juger la valeur nulle des champs dans la clause Where, sinon le moteur abandonnera l'utilisation de l'index et effectuera une analyse complète de la table, comme :

select id from t where num is null
Copier après la connexion
peut être utilisé dans Définissez la valeur par défaut 0 sur num, assurez-vous qu'il n'y a pas de valeur nulle dans la colonne num du tableau, puis interrogez comme ceci :

select id from t where num=0
Copier après la connexion
3), essayez d'éviter d'utiliser ! = ou <> dans la clause Where , sinon le moteur abandonnera l'utilisation de l'index et effectuera une analyse complète de la table

4) Essayez d'éviter d'utiliser ou dans la clause Where pour connecter les conditions , sinon le moteur abandonnera l'utilisation de l'index et effectuera une analyse complète de la table, telle que :

select id from t where num=10 or num=20
Copier après la connexion
peut être interrogé comme ceci :

select id from t where num=10    
union all    
select id from t where num=20
Copier après la connexion
5), utilisez in et not in avec prudence, sinon cela entraînera une analyse complète du tableau, tel que :

select id from t where num in(1,2,3)
Copier après la connexion
Pour les valeurs continues, si vous pouvez utiliser entre, n'utilisez pas in :

select id from t where num between 1 and 3
Copier après la connexion
6). Utilisation raisonnable de requêtes floues

Parfois, vous devez effectuer des requêtes floues, telles que :

select * from contact where username like ‘%yue%’
Copier après la connexion
Mot clé %yue%. utilisé devant yue, la requête doit parcourir toute la table. Sauf nécessité, n'ajoutez pas % devant le mot-clé

7 ), vous devriez essayer d'éviter d'effectuer des opérations d'expression sur les champs de la clause Where, ce qui amènera le moteur à abandonner l'utilisation de l'index et à effectuer une analyse complète de la table. Par exemple :

select id from t where num/2=100
Copier après la connexion
doit être remplacé par :

select id from t where num=100*2
Copier après la connexion
8), vous devez essayer d'éviter d'effectuer des opérations fonctionnelles sur les champs de la clause Where, ce qui entraînerait le moteur à abandonnez l’utilisation de l’index et procédez à l’analyse complète de la table. Par exemple :

Interrogez l'ID dont le nom commence par abc

select id from t where substring(name,1,3)=&#39;abc&#39;
Copier après la connexion
doit être remplacé par :

select id from t where name like &#39;abc%&#39;
Copier après la connexion

4.

Dans de nombreux cas, utiliser exist au lieu de in est un bon choix Exists vérifie uniquement l'existence, et ses performances sont bien meilleures que in. Exemple : 

select num from a where num in(select num from b)
Copier après la connexion
Remplacez par l'instruction suivante : 

select num from a where exists(select 1 from b where num=a.num)
Copier après la connexion

5. N'écrivez pas d'instructions SQL trop longues, trop redondantes et soyez concises ; peut être utilisé N'utilisez jamais deux phrases dans une phrase

Généralement, les résultats d'une instruction Select sont utilisés comme un sous-ensemble, puis la requête est effectuée à partir du sous-ensemble. Ce type d'instruction imbriquée est relativement. courant, mais D'après l'expérience, s'il y a plus de 3 niveaux d'imbrication, l'optimiseur de requêtes donnera facilement un plan d'exécution incorrect. Parce qu'il était abasourdi. Des choses comme l’intelligence artificielle sont finalement inférieures à la résolution humaine. Si les gens ont le vertige, je peux garantir que la base de données le sera également.

De plus, le plan d'exécution peut être réutilisé. Plus l'instruction SQL est simple, plus la possibilité de réutilisation est élevée. Tant qu'un caractère change dans une instruction SQL complexe, il doit être réanalysé, et beaucoup de déchets seront alors stockés dans la mémoire. Il est concevable à quel point la base de données sera inefficace.

6. Envisagez d'utiliser des « tables temporaires » pour stocker temporairement les résultats intermédiaires.

Un moyen important de simplifier les instructions SQL consiste à utiliser des tables temporaires pour stocker temporairement les résultats intermédiaires. , la table temporaire Les avantages sont bien plus que ceux-ci. Les résultats temporaires sont temporairement stockés dans la table temporaire et les requêtes suivantes sont dans tempdb. Cela peut éviter plusieurs analyses de la table principale dans le programme et réduit également considérablement le "partagé". lock" bloquant le "verrouillage de mise à jour" pendant l'exécution du programme. , réduisant le blocage et améliorant les performances de concurrence.

7. Lors de l'utilisation d'un champ d'index comme condition, si l'index est un index composé, le premier champ de l'index doit être utilisé comme condition pour garantir que le système utilise l'index. , les index ne seront pas utilisés et l'ordre des champs doit être cohérent avec l'ordre des index dans la mesure du possible.

8. Utilisez autant que possible des champs numériques Si les champs contenant uniquement des informations numériques ne doivent pas être conçus comme des champs de caractères, cela réduira les performances des requêtes et des connexions et augmentera la surcharge de stockage. .
En effet, le moteur comparera chaque caractère de la chaîne un par un lors du traitement des requêtes et des connexions, et pour les types numériques, une seule comparaison suffit.

9. Utilisez varchar au lieu de char autant que possible, car tout d'abord, les champs de longueur variable ont un petit espace de stockage et peuvent économiser de l'espace de stockage. petit champ L'efficacité de la recherche est évidemment plus élevée.

10. Évitez de créer et de supprimer fréquemment des tables temporaires pour réduire la consommation des ressources des tables système.

11. Essayez d'éviter d'utiliser des curseurs , car les curseurs sont moins efficaces si les données exploitées par le curseur dépassent 10 000 lignes, vous devriez envisager de les réécrire.

12. Essayez d'éviter les opérations de transactions volumineuses et d'améliorer la simultanéité du système.

13. Essayez d'éviter de renvoyer de grandes quantités de données au client Si la quantité de données est trop importante, vous devez vous demander si les exigences correspondantes sont raisonnables.

Tutoriels vidéo associés recommandés : "Tutoriel MySQL"

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal