méthodes d'optimisation des requêtes de base de données (la technologie peut poster des examens écrits!)

1. l'optimisation des requêtes, doit essayer d'éviter scan de table, devraient d'abord envisager l'indexation par la colonne impliquée dans où l'ordre public.

2. les champs doivent être évités à une valeur nulle est déterminée dans la clause where, va amener le moteur à renoncer à l'aide de l'index et une analyse complète de la table, tels que: select id de t où num est nul peut être fourni sur une valeur par défaut de 0 num, pour assurer la valeur de la colonne de table num est non nul, alors la requête suivante: select id de t où num = 0

3 devrait être évitée dans la clause where! = Ou <> opérateur, sinon le moteur donnera à l'aide de l'index et une analyse complète de la table.

4 devrait être évitée dans la clause where pour se connecter ou condition entraînera le moteur de renoncer à l'aide de l'index et une analyse complète de la table, tels que: select id de t où num = 10 ou num = 20 peut faire une requête: select id de t où num = 10 union all select id de t où num = 20

5.in doit être utilisé avec prudence et non pas, sinon elle conduira à une analyse complète de la table, tels que: select id de t où num dans (1,2,3) pour des valeurs continues entre ne peut pas utiliser dans: select id de t où num entre 1 et 3

6. La requête suivante sera également conduire à une analyse complète de la table: select id de t où nom comme « % Lee% » Pour améliorer l'efficacité, peut être considérée comme la recherche en texte intégral.

  1. Si vous utilisez un paramètre dans la clause where conduirait à une analyse complète de la table. Parce que SQL lors de l'exécution ne fera que résoudre les variables locales, mais l'optimiseur ne peut pas différer le choix du plan d'accès à courir, il doit choisir au moment de la compilation. Si, toutefois, établir le plan d'accès au moment de la compilation, la valeur de la variable est inconnue, et ne peut donc pas être utilisé comme une entrée d'index sélectionné. Comme l'instruction suivante effectuer un balayage complet de table: select id de t où num = @ num peut être changé pour forcer la requête à l'aide de l'index: select id de t avec (index (nom d'index)) où num = @ num

8. champs doivent être évités pour fonctionner dans les expressions où clause, ce qui entraînera le moteur de renoncer à l'aide de l'index et une analyse complète de la table. Tels que: select id de t où num / 2 = 100 doit être remplacé par: select id de t où num = 100 * 2

9. Le champ doit être évité à une opération de fonction dans la clause where qui provoquera le moteur de renoncer à l' aide de l'index et l' analyse complète de la table. Tels que: select id de t où substring ( nom, 1,3) = 'abc', nom commençant à id abc doit se lire:
SELECT ID de T WHERE nom comme '% ABC'

10. Ne pas exécuter des fonctions, des opérations arithmétiques, ou d'autres expressions dans la clause where « = » left, ou le système ne fonctionne pas correctement indexé.

11. Comme condition d'utiliser le champ d'index, si l'indice est un indice composite, vous devez utiliser l'index pour le premier champ pour que le système utilise l'index comme condition, sinon l'indice ne sera pas utilisé, et devrait autant que possible pour que l'ordre sur le terrain est conforme à l'indice de l'ordre.

12. Ne pas écrire la requête n'a pas de sens, comme la nécessité de créer une structure de table vide: select col1, col2 dans #t de t où 1 = 0
Ce code ne renvoie aucun jeux de résultats, mais consomme des ressources système, devrait être modifié comme ceci:
Créer une table #t (...)

13. existe souvent utilisé en place est un bon choix: select num num d'un où dans (num de b select)
est remplacé par la mention suivante:
. SELECT NUM existe de A WHERE (SELECT 1 de B OU NUM = a.num )

14. Pas tous les index sont requête valide, l'optimisation des requêtes SQL est effectuée selon les données de la table lorsque la colonne d'index a beaucoup de duplication des données, des requêtes SQL ne peuvent pas aller à utiliser l'index, comme une table a un champ sexe, mâle, près de la moitié de chaque femme, même si l'indice construit sur le sexe aucun effet sur l'efficacité de la requête.

  1. L'indice n'est pas possible, l'indice correspondant peut certainement améliorer l'efficacité de sélection, mais réduit également l'efficacité de l'insert et la mise à jour, car il est possible de reconstruire les index lors insertion ou mise à jour, de sorte que la nécessité d'examiner attentivement comment construire l'indice, comme le cas échéant. Une table de numéro d'index est préférable de ne pas plus de six, si trop vous devriez considérer certains des moins fréquemment utilisés pour construire la colonne d'index si nécessaire.

  2. Il faut éviter autant que possible les colonnes de données de mise à jour index ordonné en clusters, car l'ordre des données d'index de colonne est ordre de stockage physique en cluster enregistré dans la table, une fois que la colonne se traduira par des changements de la valeur de réglage dans l'ordre d'enregistrement de la table entière, consommera des ressources considérables. Si les applications nécessitent des mises à jour fréquentes index cluster colonnes de données, vous devez considérer si elle doit être construite pour l'indice d'index ordonné en clusters.

17 faire usage de champs numériques, si seuls les champs contenant des informations numériques est impossible pour la conception de caractère, ce qui réduit les performances des connexions et des requêtes, et augmente les coûts de stockage. En effet, le moteur quand un traitement des requêtes et des connexions en comparant chaque caractère de la chaîne, et à des fins de comparaison numérique qu'une seule fois suffit.

18. L'utilisation possible varchar / nvarchar au lieu de char / nchar, car tout d'abord longueur des champs variables petit espace de stockage, vous pouvez économiser de l'espace de stockage, suivi par la requête, dans un champ relativement faible de l'efficacité de la recherche est nettement plus élevé.

19. Ne placez pas d'utiliser select * from t, avec une liste spécifique des champs au lieu de « * », ne renvoient pas l'un des champs avec moins.

20. Tableau des variables font plutôt l'utilisation d'une table temporaire. Si la variable de table contient une grande quantité de données, s'il vous plaît noter que l'indice est très limité (seul l'index de clé primaire).

21. Évitez fréquente créer et supprimer des tables temporaires, tables système pour réduire la consommation des ressources.

22. Une table temporaire n'est pas inutilisable, ils peuvent faire un usage approprié de certaines routines plus efficaces, par exemple, quand il faut une grande table ou tables de références généralement en double un ensemble de données. Cependant, pour un événement unique, il est préférable d'utiliser la table d'exportation.

23. Lorsque la nouvelle table temporaire, si l'on insère une grande quantité de données, il peut être utilisé au lieu de sélection dans create table, afin d'éviter un grand nombre de connexions, afin d'augmenter la vitesse, si les petites données, afin de faciliter la table des ressources du système, devrait create table, puis insérez.

24. Si vous utilisez une table temporaire pour être sûr toute la table temporaire explicite supprimé à la fin de la procédure stockée, première table de troncature, puis déposez la table, afin d' éviter le blocage des tables système depuis longtemps.
25. Essayez d'éviter d' utiliser un curseur, parce que le mauvais rendement du curseur, si l'opération de curseur plus de 10.000 lignes, vous devriez envisager la réécriture.

26. Utilisez le curseur avant la méthode ou des méthodes basées sur des tables temporaires, vous devez chercher des solutions basées sur des ensembles pour résoudre le problème, la méthode à base de configuration généralement plus efficace.

  1. Comme la table temporaire, un curseur n'est pas inutilisable. Utilisez le curseur FAST_FORWARD sur les petits ensembles de données sont généralement mieux que d'autres méthodes de traitement progressives, en particulier en référence à plusieurs tables doivent être afin d'obtenir les données nécessaires. Dans le jeu de résultats comprend « total » que les routines habituelles effectuées en utilisant la vitesse du curseur rapide. Si le temps le permet, les méthodes de développement liées au curseur et peut être réglé en fonction de l'approche essayer de voir quelle méthode est la meilleure.

28. Set SET NOCOUNT ON au début de toutes les procédures stockées et les triggers, SET NOCOUNT OFF disposé à l'extrémité. DONE_IN_PROC pas besoin d'envoyer un message au client après chaque instruction est exécutée et déclenche la procédure stockée.

29. Essayez d'éviter les grandes opérations de transactions, améliorer la concurrence du système.

30. Évitez retourné au client une grande quantité de données, si les données sont trop grandes, vous devriez considérer la demande correspondante est raisonnable. `
----------------
Réimpression: Cet article est blogueur RPSC "vent sourire Yi" dans l'article original,
le lien d' origine: https: //blog.csdn.net/weixin_42129286/article/ détails / 82461980

Publié 24 articles originaux · louanges gagnées 0 · Vues 590

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43896829/article/details/104846298
conseillé
Classement