1. Expérience d'optimisation SQL 1, sélectionnez la commande de table la plus efficace (uniquement dans l'optimiseur basée sur la règle)
Oracle Parser traite le nom de la table dans la proposition de DROIT à gauche, et écrit dans la dernière table (table de conduite de la table de base) sera traité en premier, en cas de nombreuses tables incluses dans la clause de mot, vous devez sélectionner la table avec le moins de numéros d'enregistrements comme base. table. S'il y a plus de 3 requêtes de connexion de table, vous devez sélectionner la carte d'enregistrement
sous forme de table de base,La table de croisement fait référence à la table référencée par d'autres tables. 2, l'ordre de connexion dans la clause WHERE
Oracle utilise l'ordre de ci-dessous pour analyser la clause où, selon ce principe, . La connexion entre la table doit être écrite avant d'autres conditions, et les conditions peuvent être filtrées sur le nombre maximal d'enregistrements qui doivent être écrits à la fin de la clause WHERE.
3, "*"
Oracle est évitée pendant l'analyse,
"" * "passera à tous les noms de colonnes,Ce travail est effectué par interrogation de dictionnaires de données, ce qui signifie plus de temps.
4, réduction du nombre de trafic de la base de données
Oracle a exécuté une partie des travaux à l'intérieur suivant:
Analyse de l'instruction SQL, index d'utilisation estimée , des variables de liaison, des blocs de données de lecture, etc.5, réinitialisez le paramètre Arramérisation dans SQL * Plus, SQL * FORMES ET PRO * C, peut augmenter le nombre de traces de chaque base de données. Accès, la valeur proposée est de 200
6, utilisez la fonction de décodage pour réduire le temps de traitement
Utilisez la fonction de décodage pour éviter de répéter la même surface d'enregistrement ou de connexion répétée.
7, Intégration, accès à la base de données non liée
Si vous avez quelques instructions de requête de requête de base de données simples, vous pouvez leur intégrer dans un accès VAppuyez sur(même sans relation entre eux)
8, Supprimer l'enregistrement de répétition
est la méthode d'enregistrement la plus efficace (parce que l'utilisation de Rowid) exemple
9, utilisez le trucatite pour remplacer la suppressionlorsqu'il est écrit dans la table supprimée, dans le boîtier normal, le segment de récupération est utilisé pour enregistrer les informations de stockage peut être restauré si vous n'avez pas de Transaction d'engagement, Oracle récupérera les données avant que les données ne soient supprimées (CORRECT, elle est restaurée lors de la répartition des situations avant de supprimer la commande), lors de l'utilisation d'une coupe courte, le segment de restauration ne stocke plus d'informations pouvant être récupérées. Lorsque la commande est exécutée, les données ne peuvent pas être restaurées, de sorte que certaines ressources sont appelées, le temps d'exécution sera très court. (Traducteur Appuyez sur: Coupes courtes Seulement supprimé la table complète, tronquée est que DDL n'est pas DML)
10, essayez d'utiliser l'engagement
] ] Tant que possible, essayez d'utiliser un engagement abondant que possible dans le chapitreLe programme de performance du programme est amélioré et la nécessité sera également réduite en raison des ressources libérées par les engagements.
CommTtree a été émis par l'engagement:
Les informations utilisées pour récupérer des données sur le segment de restauration,DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)
La clé a été collectée par la déclaration de programme Redo Bock Buffer
Oracle est le coût interne des trois ressources sur
11, avec la clause où
Pour éviter l'utilisation de la clause, filtrera uniquement la suivant les résultats pour prendre tous les enregistrements. Ce processus nécessite le tri, le total, etc. Si vous pouvez limiter le nombre d'enregistrements via la clause WHERE, il peut réduire ce coût,
(non oracle), il y a trois choses qui peuvent être ajoutées dans la première C'est le premier fait, tandis que, il y en a enfin, car ce qui précède est non enregistré des enregistrements après filtrage, il peut réduire les données est traitée par des opérations intermédiaires. Ce doit être où se connecter n'importe où. C'est à direUtilisé sur, alors quand j'étais une table où il y avait une place à comparer à avoir.Selon ces statistiques de requête, si les conditions filtrées ne sont pas liées au champ de calcul, le même résultat, mais il est possible d'utiliser la technologie Rushmore, ne peut pas, après plus tard si vous le souhaitez. Pour se rapporter au champ calculé, cela signifie que la valeur de ce champ est incertaine avant le calcul,
selon le processus de travail, la loi sur le temps avant de calculer et le fait qu'il n'y ait que le rôle après le calcul et dans ce cas, le résultat des deux est différent. Allumez plus tôt plus rapidement que d'où dans plusieurs tables. Le premier système synthétise une table temporaire en fonction des conditions de couplage entre les tables individuelles, puis lorsque le filtre est, puis calculé, après calcul, filtrez-le par existant. On peut voir qu'il est nécessaire d'essayer le rôle correct dans les conditions de filtrage. Tout d'abord, nous devons comprendre quand cette condition sera activementGrotte, puis décidez là-bas.12, réduit la requête du tableau
Dans la déclaration SQL contenant une requête sous-cutanée, une attention particulière doit être accordée pour réduire la requête de la table.
13, améliorer l'efficacité SQL selon la fonction interne
complexe SQL Sans sacrifier la performance de performance. Il est très significatif dans le travail réel capturant le problème de la résolution des problèmes avec les fonctions utilisées ci-dessus.
14, Utilisez des tables
lorsque plusieurs tables sont connectées dans l'instruction SQL, utilisez la table. Des alias et des alias ont été réservés sur chaque colonne peuvent réduire le temps d'analyse et réduire les erreurs de syntaxe causées par la colonne AMBIGUE. 15 nécessitent souvent une autre table. Dans ce cas, l'utilisation de l'existence (ou n'existe pas) améliorera généralement l'efficacité de la requête
en sous-requête, aucune proposition n'exécutera un type interne et consolidé. Indépendamment de l'affaire, kNe soyez pas l'effet le plus bas
(car il effectue une table de transmission de table complète dans la table dans la sous-requête), pour éviter d'utiliser non pas dans, nous pouvons réécrire la participation externe ou l'existence. En.
16, Identifier "Les énoncés SQL inefficaces
SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT
Bien que présentent des graphiques sans fin Outil d'optimisation SQL, toujours le meilleur moyen de résoudre le problème de résoudre le problème:
17, l'index augmente l'efficacité
L'index est un concept de la table, utilisée pour améliorer l'efficacité des données de récupération,
Oracle à l'aide de l'équilibre complexe de la structure de l'auto-arbre, généralement Optimizer utilise un index lorsqu'il s'agit d'un chemin à temps plein pour exécuter des requêtes et une instruction mise à jour. Oracle Optimizer utilisera des index.. Utiliser l'index lors de la connexion de multiples réponses. Efficace peut également être amélioré. Un autre avantage deL'utilisation d'un index est qu'il fournit une unicité de la clé primaire.Types de données bruts longs ou longs, vous pouvez indexer presque toutes les colonnes. Normalement, dans de grandes tables avec des valeurs spécifiques. Bien sûr, vous constaterez également que lors de la numérisation de petites tables, l'utilisation d'index peut également améliorer l'efficacité. Bien que l'utilisation d'indicateurs puisse être améliorée dans l'effet de la requête, nous devons faire attention à elle.
L'index nécessite un espace pour stocker et vous avez besoin d'une maintenance régulière, chaque fois qu'il existe un enregistrement dans la table, lorsque la colonne d'index est modifiée, l'index lui-même sera modifié.Cela signifie que tous les insertions, la suppression, les mises à jour paieront plus de 4, 5 fois I / O. Comme l'index nécessite un espace de stockage et un traitement supplémentaires, ceux qui ne sont pas nécessaires à l'index ralentiront le temps de réponse de la requête. Les indicateurs de reconstruction réguliers sont nécessaires: 18, remplacement séparé
Lors de l'envoi d'une requête contenant une paire d'informationsLes tables (telles que les tables d'employés et les tableaux du personnel),
Éviter une utilisation séparée de la clause SELECT, peut souvent être remplacée par l'existence,survivre à des interrogations d'aide plus rapidement, car TIMSERS -C Core RDBMS retournera les résultats immédiatement après C'est satisfait.
19, la déclaration SQL a été capitalisée; Étant donné que Oracle a toujours analysé l'instruction SQL précédente, abaissant les minuscules du changement de mère est réalisée à nouveau20, la chaîne de connexion "+" est au moins possible dans le code Java!
21 Évitez d'utiliser non pas sur la colonne Index, nous devons éviter d'utiliser non disponible sur la colonne Index, qui ne créera pas dans la colonne Index à l'aide de la seule même fonction, lorsque Oracle "rencontré, il a cessé d'utiliser l'indexation pour effectuer une numérisation de table complète.
(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT “X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = “MELB')
22, évitez de calculer la colonne d'index.
L'optimiseur n'utilisera pas l'index pour utiliser la numérisation de la table complète.
23, avec & gt; = Remplacer & gt;SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,
La différence est que la DBMS précédente passera directement dans le premier enregistrement de département avec 4, puis localisez le profil de Messno = 3 et numérisé vers la première pièce. est plus de 3 enregistrements
24, avec une alliance alternative ou
(pour des colonnes d'indexation)
normalement, ou dans la clause de la suivante: Va jouer un meilleur effet et la colonne Index sera utilisée ou provoquera l'ensemble de l'analyse, Notez que les règles ci-dessus sont valables uniquement pour plusieurs colonnes d'index,
Si une colonne n'est pas indexée, l'effet de requête peut diminuer. Parce que vous ne choisissez ni ne diminue, dans l'exemple, LOC_ID et REGON ont un index.ALTER INDEX REBUILD
Efficace: Si vous insistez sur l'utilisation ou, vous devez renvoyer la colonne d'index au moins écrit à l'avant.
25, remplaçant ou
Il s'agit d'une règle facile à enregistrer, mais l'effetLes tests réels doivent être vérifiés. Selon Oracle8i, le chemin d'exécution des deux semble le même.
26, Évitez d'utiliser une null et non NULL
sur la colonne d'index pour éviter d'utiliser n'importe quelle colonne vide, Oracle ne pourra pas utiliser l'index.
Pour un seul index de colonne, si la colonne contient des tambours, aucun enregistrement tel que l'index, pour l'index synthétique, si chaque colonne est vide, l'index n'existe pas dans cet enregistrement, si au moins une colonne n'est pas vide,le dossier existe dans un index.Par exemple:
Si le seul index est défini sur la liste de la table et de la colonne B, avec une valeur A et B enregistrée ( NULL) dans la table. Oracle n'acceptera pas l'enregistrement suivant (INSERT) de la même valeur A, B ( NULL), cependant, si toutes les colonnes d'index blanc, Oracle pensera que toute la valeur de verrouillage vide, afin que cela puisse insérer 1000 enregistrements avec le même Clé de valeur, bien sûr, ils sont vides!inefficace: (Erreur d'index)
27, utilisez toujours la première colonne de la colonne IndexSi l'index est construit sur plusieurs colonnes, Optimiseur seulement sélectionnez l'index lorsqu'il est cité par la clause WHERE (colonne supérieure).
Il s'agit également d'une règle simple et importante, lorsque la deuxième référence de colonne de l'index, l'optimiseur utilise complètement la numérisation de la table et en ignorant l'index.28, remplaçant le syndicat (si possible)
Lorsque l'instruction SQL doit combiner deux requêtes, deux collections de ce résultat sont fusionnées en fonction de l'uion - tous, puis arrangé avant d'exporter le résultat final, si tous les syndicats sont remplacés par un syndicat, inutile et l'efficacité sera améliorée
] À noter:
L'Alliance sera tout le même enregistrement dans les deux ensembles de résultats, pour calculer la faisabilité de l'utilisation de toutes les exigences opérationnelles, Union organisera à ce moment-là que cette manipulation utilise cette mémoire et optimise cette mémoire. la mémoire est également importante, le SQL suivant peut êtreUtiliser pour interroger la consommation triée.
29, avec un lieu de remplacement de l'ordre dans l'ordre
selon la clause uniquement dans deux conditions strictessur des colonnes dans le rder en étant incluse dans le même Index et restent dans l'index
Toutes les colonnes dans l'ordre doivent être définies comme l'index non videoù les propositions et l'ordre des termes d'index sont utilisées ne peuvent pas être utilisées en parallèle
Par exemple: Les pièces de la table comprennent suivant dept_code nol noldept_desc nul null dept_type null
inefficace:(l'index n'est pas utilisé)
30, Évitez la colonne d'index
Lorsque vous comparez différentes données lorsque le type de données, Oracle exécute automatiquement des conversions de type simples.
En supposant que Empno est une colonne d'index de catégorie
après la conversion de type Oracle, la commande sera convertie en Heureusement, la commutation ne se produit pas sur la colonne Index et l'utilisation d'index ne peut pas être modifiée.
Maintenant, Emp_Type est une colonne d'index du type de caractères
Cette déclaration est convertie en
] Parce que l'aspect interne est converti, cet indice ne sera pas utilisé! Pour éviter les conversions de type cachés dans votre SQL, il est préférable d'afficher les conversions de type avec une manière claire. Remarque Lorsque les caractères comparer avec la comparaison du numéro, Oracle donnera la priorité au nombre de numéros de caractères. 31, il est nécessaire d'examiner les termes Certains termes dans certaines déclarations sélectionnées ne pas utiliser les index, il y a quelques exemples. "! =" Ne sera pas utilisé dans l'exemple suivant. Rappelez-vous, l'index ne peut vous dire ce qui existe dans le tableau et ne peut pas vous direCe qui n'existe pas dans la table "||" est une fonction de connexion de caractère. Comme d'autres fonctions, index "+" est une fonction mathématique. Comme d'autres fonctions mathématiques, l'index est désactivé. Il ne peut pas être comparé aux autres, qui activera la numérisation complète de la carte 32, si la capacité de données dépasse 30% de la quantité de quantité de données. L'utilisation de l'index ne sera pas significativement efficace. Dans certains cas, l'indice d'utilisation peut être plus lent que la table complète, mais c'est la différence entre le même ordre. Et généralement, utilisez le rapport index de la table complète pour numériser quelques fois ou plusieurs fois! 33, Évitez les ressources de fonctionnement Des énoncés SQL avec la différence, un syndicat, une intersection, la commande démarrera le moteur SQL. Application des fonctions d'arrangement de ressources. La différence doit être organisée une fois, alors que d'autres doivent faire deux fois. Normalement, déclarationsSQL avec Union, moins et les intersecteurs peuvent être réécrites d'une autre manière.Si Sort_Area_Size de votre base de données a été corrigé, utilisez Union, moins et des intersections sont également considérés, après tout, leur lisibilité est forte. 34, le groupe optimisé par Améliorer les performances du groupe en fonction de la déclaration, peut être filtrée en filtrant des journaux indésirables avant le groupe.Les deux requêtes suivantes ont renvoyé le même résultat mais la seconde était beaucoup plus rapide.