12 février 2019

Les tables IOT : partie 2, index secondaire décalé avec l'index primaire - Secondary index shifted with primary index

  IntroductionCet article présentait les concepts de base d'une table IOT : http://dbaoraclesql.canalblog.com/archives/2019/01/29/37058939.html.Nous allons maintenant voir s'il est possible de prouver, comme le dit la doc Oracle, que lorsque les logicals rowid de l'index secondaire ne sont plus en phase avec les vrais rowids de la table IOT, alors Oracle fait une lecture directe via le rowid qui échoue avant de parcourir la table IOT.   Points d'attentionAucun. Base de testsUne base Oracle 12. ... [Lire la suite]
Posté par David DBA à 13:14 - - Permalien [#]
Tags : ,

20 décembre 2018

Index virtuel et index invisible : à quoi servent-ils? - Virtual index and invisible index: what are they for?

IntroductionLa création d'un index, ainsi que sa suppression, peuvent prendre des heures selon la volumétrie des tables. En 2018, une table de 500 millions d'enregistrements n'a rien d'extraordinaire, ni même une table en ayant 5 milliards. Le problème est que lorsqu'on veut optimiser une requête via l'ajout d'un index pour voir si le CBO génère un meilleur plan, tester cette hypothèse va prendre trop de temps. C'est pour répondre à ce problème que Oracle a créé les types d'index suivants : index virtuel et index invisible. Ces types... [Lire la suite]
Posté par David DBA à 18:21 - - Permalien [#]
Tags : ,
16 décembre 2018

Index partiel sur NULL : comment indexer uniquement la valeur NULL d'une colonne - Partial index on NULL: how to index only NULL

IntroductionOn vous a dit qu'il n'était pas possible sous Oracle d'indexer la valeur NULL. J'ai prouvé ici que c'était faux : http://dbaoraclesql.canalblog.com/archives/2018/08/05/36611094.html. Idem pour le fait que Oracle ne gère pas d'index partiel : cette fonctionnalité est disponible en 12c mais uniquement pour des tables partitionnées.  Néanmoins il existe une solution de contournement depuis plusieurs  versions d'Oracle : créer un index sur fonction qui mettra à NULL les valeurs que l'on ne veut pas indexer, et, de la... [Lire la suite]
Posté par David DBA à 10:35 - - Permalien [#]
Tags : ,
20 octobre 2018

Index créé par une contrainte d'intégrité ou non : comment les identifier? - Index created by an integrity constraint or not

IntroductionEst-ce que vous savez comment distinguer les index créés via les contraintes d'intégrité PRIMARY KEY et UNIQUE des index créés à la demande? Non? OK, on va voir ça, en route vers le coeur d'Oracle :-)  Points d'attentionAucun. Base de testsN'importe quelle base Oracle. Exemples============================================================================================La table du dictionnaire de données IND$============================================================================================Premier... [Lire la suite]
Posté par David DBA à 12:14 - - Permalien [#]
Tags : ,
05 août 2018

Indexer la valeur NULL et l'utiliser dans la clause WHERE - Index the NULL value and use it in the WHERE clause

Introduction"Oracle n'indexe pas la valeur NULL" : combien de fois j'ai lu cela... il faudrait ajouter, pour être plus précis, "sauf sous certaines conditions", que nous allons voir de suite :-)   Points d'attentionNA.   Base de testsN'importe quelle base Oracle; tests sur une 12.1.     ExemplesOn crée une table de test basique, avec 10 000 enregistrements.     SQL> create table TEST_NULL (ID NUMBER, NAME VARCHAR2(30 CHAR));     Table... [Lire la suite]
Posté par David DBA à 22:09 - - Permalien [#]
Tags : , ,
02 juin 2018

Jointure d'index : le INDEX FAST FULL SCAN n'est pas optimisé par Oracle - Index join: INDEX FAST FULL SCAN is not optimized

IntroductionLe but de cet article est de discuter du mode d'accès aux index appelé INDEX FAST FULL SCAN, et plus précisément de montrer qu'il n'est pas optimisé (oui, c'est prétentieux de ma part) lors d'une jointure d'index. Pour cela nous allons utiliser un hint et montrer que Oracle lit TOUS les blocs de l'index puis filtre les données au lieu de traiter N blocs d'un coup et de s'arrêter une fois tous les enregistrements trouvés, ce qui serait plus pertinent. Bien sur, INDEX FAST FULL SCAN signifie "lecture rapide de TOUT l'index"... [Lire la suite]
Posté par David DBA à 18:57 - - Permalien [#]
Tags : ,
19 novembre 2017

Oracle peut utiliser un index avec LIKE '%texte%' : idées reçues sur les index - Oracle can use an index with LIKE '% text%'

IntroductionUne idée courante sous Oracle est qu'une fonction utilisée sur un champ indexé empêche l'utilisation de cet index. Nous allons prouver que c'est plus complexe que cela et que même avec le fameux LIKE '%texte%' ou la sélection de 100% des données, Oracle peut utiliser un index. Il faut néanmoins distinguer comment Oracle traite les fonctions de groupes telles que MIN, MAX, COUNT des fonctions comme SUBSTR, UPPER. Il faut aussi tenir compte si le SELECT se fait uniquement sur la colonne indexée ou non, que la fonction est... [Lire la suite]
Posté par David DBA à 18:03 - - Permalien [#]
Tags :
15 septembre 2017

Les informations affichées par Oracle ne sont pas toujours fiables - The information displayed by Oracle is not always reliable

IntroductionUn problème agaçant avec Oracle est que les informations recherchées sont parfois difficiles à trouver voir même sont incomplètes. Soit ces infos sont dispersées dans plusieurs vues sans point d'entrée unique, soit des paramètres de niveau base sont écrasés par des paramètres de niveau local soit les infos ne sont pas où le DBA junior pensent qu'elles devraient être. Oracle est devenu au fil des versions de plus en plus complexe et des règles d'anciennes versions sont obsolètes pour les nouvelles versions, comme par... [Lire la suite]
Posté par David DBA à 12:35 - - Permalien [#]
Tags : , , ,
08 mai 2017

Un monitoring des index plus évolué que celui d'Oracle - More advanced index monitoring than Oracle one

IntroductionSi vous avez déjà utilisé l'outil de monitoring des index d'Oracle, vous avez dû être effarés devant la pauvreté de celui-ci. Oracle n'indique en effet que si Oui ou Non un index est utilisé durant la période de monitoring mais pas le nombre de fois qu'on l'utilise. Dans le cas où vous voulez supprimer des index d'une table qui en a trop parce qu'ils ralentissement les INSERT et DELETE, la première chose à faire est de voir si ces index sont utilisés ou non mais aussi combien de fois ils le sont avant de prendre une... [Lire la suite]
Posté par David DBA à 22:21 - - Permalien [#]
Tags : , ,