Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment faire le réglage sql dans Oracle

Introduction à l'optimisation SQL

  • Les instructions SQL sont écrites pour récupérer/récupérer les données de la base de données. Nous voulons que notre instruction SQL s'exécute rapidement (réglage SQL) et fournisse les résultats en quelques secondes.
  • Un sql mal conçu peut ralentir l'ensemble du fonctionnement de la base de données et l'arrêter. Il est beaucoup plus difficile d'écrire du SQL efficace que d'écrire du SQL fonctionnellement correct. Le réglage des performances sql peut améliorer considérablement la santé et les performances d'un système.
  • La clé du réglage de SQL consiste à minimiser les données auxquelles il accède pour fournir le résultat. Nous pouvons minimiser les données auxquelles il accède pour fournir le résultat via un chemin de recherche optimal.

Un exemple simple serait

select * from dept where emp=10
  • Maintenant, cette requête devra rechercher l'ensemble du département de la table pour trouver les données où emp=10. Il doit donc accéder à la table complète
  • Maintenant, si nous créons la colonne index vers emp, elle peut simplement accéder à l'index et obtenir le résultat. Donc ici c'est accéder au moins de données

12 étapes pour effectuer le réglage Sql dans Oracle

Voici les conseils généraux pour le réglage des performances sql

(1) Vous devez d'abord disposer de tous les outils requis pour le réglage sql. Vous devez disposer de bonnes informations sur le traçage, le formatage de la trace, le plan d'explication, la lecture du plan d'explication dans oracle.
Bonne connaissance des différentes méthodes de jointure disponibles dans Oracle et comment les utiliser efficacement

(2) Lire moins de données et être efficace en matière d'E/S.
Plus vous lisez de données pour l'instruction sql, plus elle doit acquérir de verrous et cela ralentit les performances. il doit donc toujours faire moins de lectures logiques
Écrivez une instruction sql sensible là où les filtres appropriés. Vérifiez le nombre de lignes dans les différentes tables impliquées et découvrez la meilleure méthode pour créer l'instruction sql

(2) Utilisez de bons index Oracle
Les index B-Tree et les index Bitmap peuvent être utilisés pour augmenter les performances des requêtes si les données renvoyées sont inférieures à 10 %. Mais nous devons être prudents lors de la création de l'index car il doit également être conservé pour les opérations d'insertion, de mise à jour et de suppression. Ainsi, la création d'un index crée une surcharge sur de nombreuses choses. Nous devons donc examiner attentivement l'effet de la création de l'index.

(3) Évitez sql qui désactive l'utilisation de l'index

SQL qui désactive les index
(a)Fonctions ( to_char(), to_date(), etc. )
Correction :déplacer la fonction du côté "constant/bind variable"
(b) Type Casting
En SQL
où emp_no =10 (emp_no est un varchar2)
En PL/SQL
où emp_no =v_emp_num (v_emp_num est un nombre)
Modificateurs
et id + 0 =111
et date + 1 =sysdate (date d'essai =sysdate – 1)
Correctif :changez-le pour l'éviter


(4) Utilisez toujours la variable de liaison dans l'application. Si vous n'utilisez pas de variable de liaison dans oracle, le sql sera analysé à chaque fois et aura un impact sur les performances de la base de données. S'il contient la variable de liaison, sql sera mis en cache et une exécution ultérieure ne nécessitera pas d'analyse et les performances globales du système sont améliorées.

(5) UNION contre OR. Utilisez UNION pour les requêtes avec deux chemins d'exécution clairs ; chacun retournant un assez petit nombre de lignes. N'utilisez pas union pour les requêtes susceptibles de renvoyer un grand nombre de lignes, car toutes les lignes doivent être triées et la plupart d'entre elles seront supprimées. OU a tendance à désactiver l'index

(6) Utilisez les statistiques précises de l'optimiseur sur le tableau pour obtenir le plan optimal.

(7) Si vous utilisez la fonction sur l'expression sur la condition, vérifiez s'il existe un index basé sur la fonction sur cette colonne. S'il n'est pas présent l'index ne sera pas utilisé

(8) Utilisez existe vs in et Non existe vs not in pour les sous-requêtes corrélées

(9) Évitez les mauvaises pratiques de codage
Quelques conseils
(a) Évitez la jointure cartésienne . Assurez-vous que toutes les tables requises dans les requêtes sont nécessaires et sont liées les unes aux autres
(b) Utilisez Decode pour éviter plusieurs allers-retours vers la base de données
(c) Essayez d'éviter les jointures externes
(d ) Parfois, décomposer la logique en petites parties rend le travail plus rapide

(10) Si vous essayez d'utiliser la vue complexe, vérifiez si les tables de base peuvent être utilisées à la place car la vue a tendance à nuire aux performances

(11) Utilisez UNION ALL Vs UNION si vous savez que les données récupérées n'auront pas de lignes en double

( 12) Utilisez des astuces pour optimiser le plan d'exécution. Parfois, l'indice peut être utilisé pour modifier le plan d'exécution de la requête afin d'emprunter le chemin le plus optimal. de bonnes performances à chaque fois
Les conseils les plus courants sont
/*+ LEADING (alias de table) */ spécifie la table par laquelle commencer la jointure
/*+ FIRST_ROWS */ très bon pour les connexions en ligne screens – favorise les BOUCLES NESTED
/*+ INDEX (table alias.index name) */ spécifie l'index que vous souhaitez utiliser. Remarque :si l'index est supprimé et recréé et que le nom change, l'indice n'est plus valide.
/*+ USE_NL (table alias1 table alias 2)*/ demande à l'optimiseur d'utiliser la jointure de boucle imbriquée pour les deux tables spécifiées

Évitez les conseils d'optimisation inutiles et utilisez-les avec précaution

Voici quelques-uns des conseils pour éviter les problèmes et faire le réglage sql. Le réglage Sql est un grand océan et vous pouvez apprendre des choses en pratiquant uniquement. Bonne chance !!

Lit également
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm