Maison >Problème commun >Il existe plusieurs types d'index dans Oracle
Oracle propose six types d'index, à savoir : 1. L'index d'arbre B*, qui est structuré comme un arbre binaire et peut fournir un accès rapide à une ligne ou à un ensemble de lignes basé sur la clé 2. L'index Bitmap, qui est ; adapté aux données très répétitives et généralement en lecture seule ; 3. Index basé sur une fonction, qui peut stocker le résultat d'un calcul de fonction dans une colonne d'une ligne ; 4. Index de domaine d'application, un index construit et stocké par soi-même ; Index HASH, un cluster HASH doit être utilisé ; 6. , Les index partitionnés divisent simplement un index en plusieurs fragments.
L'environnement d'exploitation de cet article : système Windows 10, Oracle version 19c, ordinateur Dell g3.
Oracle propose six types d'index différents à utiliser.
Oracle comprend les index suivants :
1, index d'arbre B*
Ce sont ce que j'appelle des index "traditionnels". Il s'agit de loin de l'index le plus couramment utilisé dans Oracle et dans la plupart des autres bases de données.
Les arbres B* sont construits de manière similaire aux arbres binaires et peuvent fournir un accès rapide à une ligne ou à un ensemble de lignes en fonction de la clé, ne nécessitant généralement que quelques opérations de lecture pour trouver la bonne ligne. Cependant, il est important de noter que le « B » dans « l’arbre B* » ne représente pas un binaire, mais un équilibré. Un index d'arbre B* n'est pas un arbre binaire, comme vous l'apprendrez lorsque nous présenterons comment stocker physiquement un arbre B* sur disque. Les index arborescents B* ont les sous-types suivants :
Table organisée d'index : les tables organisées d'index sont stockées dans une structure arborescente B*. Contrairement aux tables de tas, où les lignes de données sont stockées de manière non organisée (les données peuvent être placées tant qu'il y a de l'espace disponible), les données dans IOT sont stockées et triées dans l'ordre des clés primaires. Pour l'application, l'IOT se comporte comme une table « normale » ; SQL est requis pour accéder correctement à l'IOT. L'IOT est particulièrement utile pour l'acquisition d'informations, les systèmes spatiaux et les applications OLAP. L'IoT a été abordé en détail dans le chapitre précédent.
Indice de cluster B*tree (index de cluster B*tree) Il s'agit d'une variante de l'index de cluster B*tree traditionnel (avec seulement de légers changements). Les index clusterisés arborescents B* sont utilisés pour indexer les clés clusterisées (voir la section « Indexation des tables clusterisées » au chapitre 11.), ils ne seront donc pas abordés dans ce chapitre. Dans les arbres B* traditionnels, les clés pointent vers une ligne ; contrairement au clustering d’arbre B*, une clé de clustering pointe vers un bloc qui contient plusieurs lignes liées à cette clé de clustering.
Index décroissant : L'index décroissant permet de trier les données dans la structure de l'index dans l'ordre "du plus grand au plus petit" (ordre décroissant), plutôt que dans l'ordre "du plus petit au plus grand" (ordre croissant). Nous expliquons pourquoi les index descendants sont importants et expliquons comment fonctionnent les index descendants.
Index de clé inversé : Il s'agit également d'un index d'arbre B*, sauf que les octets de la clé seront "inversés". Avec un index à clé inversée, les entrées d'index peuvent être réparties plus uniformément dans l'index si l'index est rempli de valeurs croissantes. Par exemple, si vous utilisez une séquence pour générer une clé primaire, la séquence générera des valeurs telles que 987500, 987501, 987502, etc. Ces valeurs sont séquentielles, donc si un index d'arbre B* traditionnel était utilisé, ces valeurs pourraient être placées sur le même bloc de droite, ce qui augmente les conflits pour ce bloc. A l'aide de la clé inverse, Oracle indexera logiquement 205789, 105789, 005789, etc. Oracle inversera les octets des données stockées avant de les placer dans l'index, de sorte que les valeurs qui peuvent à l'origine être adjacentes les unes aux autres dans l'index seront très éloignées les unes des autres après l'inversion des octets. En inversant les octets, les insertions dans l'index sont réparties sur plusieurs blocs.
2. Index bitmap (index bitmap)
Dans un arbre B*, il existe généralement une relation un-à-un entre les entrées d'index et les lignes : une entrée d'index pointe vers une ligne. Pour les index bitmap, une entrée d'index utilise un bitmap pour pointer vers plusieurs lignes en même temps. Les index bitmap conviennent aux données très répétitives et généralement en lecture seule (hautement répétitives signifie que les données n'ont que quelques valeurs distinctes par rapport au nombre total de lignes du tableau). Prenons un tableau de 1 million de lignes, où chaque colonne n'a que trois valeurs possibles : Y, N et NULL. Par exemple, si vous devez fréquemment compter le nombre de lignes ayant la valeur Y, cela convient pour créer un index bitmap. Cependant, cela ne signifie pas que si une colonne de ce tableau contient 11 000 valeurs différentes, un index bitmap ne peut pas être créé. Bien entendu, un index bitmap peut également être créé pour cette colonne. Dans une base de données OLTP, les index bitmap ne peuvent pas être pris en compte en raison de problèmes liés à la concurrence (nous en discuterons plus tard). Notez que les index bitmap nécessitent Oracle Enterprise ou Personal Edition.
Index de jointure Bitmap : cela fournit un moyen de dénormaliser les données dans une structure d'index (plutôt que dans une table). Par exemple, considérons les simples tables EMP et DEPT. Quelqu'un peut poser cette question : « Combien de personnes travaillent dans le département situé à Boston ? » EMP a une clé étrangère pointant vers DEPT. Pour compter le nombre d'employés dans le département avec la valeur LOC de Boston, vous devez généralement remplir un formulaire. la jointure de table et la colonne LOC se joint aux enregistrements EMP pour répondre à cette question. En utilisant un index de jointure bitmap, vous pouvez indexer la colonne LOC sur la table EMP.
3. Index basé sur une fonction (index basé sur une fonction)
Il s'agit d'index arborescents B* ou d'index bitmap, qui stockent le résultat d'un calcul de fonction dans la colonne de la ligne au lieu de stocker les données de la colonne elles-mêmes. Vous pouvez considérer un index basé sur une fonction comme un index sur une colonne virtuelle (ou une colonne dérivée) ; en d’autres termes, la colonne n’est pas physiquement stockée dans la table ; Les index basés sur des fonctions peuvent être utilisés pour accélérer les requêtes telles que SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE car la valeur FUNCTION(DATABASE_COLUMN) a été calculée à l'avance et stockée dans l'index.
4. Index de domaine d'application (index de domaine d'application)
L'index de domaine d'application est un index que vous créez et stockez vous-même. Il peut être stocké dans Oracle ou en dehors d'Oracle. Vous devez indiquer à l'optimiseur à quel point l'index est sélectif et quel est le coût de son exécution, et l'optimiseur décidera d'utiliser ou non votre index en fonction des informations que vous fournissez. Les index de texte Oracle sont un exemple d'index de domaine d'application. Vous pouvez également créer le vôtre à l'aide des mêmes outils que ceux que vous utilisez pour créer des index de texte Oracle. Il convient de souligner que « l'index » créé ici ne nécessite pas l'utilisation d'une structure d'index traditionnelle. Par exemple, les index de texte Oracle utilisent un ensemble de tables pour implémenter leurs concepts d'index.
5. Index HASH
Pour utiliser l'index HASH, vous devez utiliser le cluster HASH. Lorsque vous créez un cluster ou un cluster HASH, vous définissez également une clé de cluster. Cette clé indique à Oracle comment stocker la table sur le cluster. Lors du stockage des données, toutes les lignes liées à cette clé de cluster sont stockées sur un bloc de base de données. Si les données sont stockées dans le même bloc de base de données et qu'un index HASH est utilisé, Oracle peut accéder aux données en exécutant une fonction HASH et des E/S - et en appliquant des données d'index B-tree de hauteur binaire 4, vous devez utiliser. 4 E/S lors de la récupération des données.
Conseils : les index HASH sont très utiles lorsqu'il y a des restrictions (nécessité de spécifier une certaine valeur plutôt qu'une plage de valeurs).
6. Index partitionné
Un index partitionné divise simplement un index en plusieurs fragments, de sorte que des fragments plus petits soient accessibles et que ces fragments puissent être stockés sur différents disques durs (pour éviter les problèmes d'E/S). Les index de numéro B et les index bitmap peuvent être partitionnés, mais les index HASH ne peuvent pas être partitionnés.
Il existe deux types d'index partitionnés : l'index partitionné local et l'index partitionné global. Chaque type a deux sous-types, avec et sans préfixe. Si un index bitmap est utilisé, il doit s'agir d'un index local.
La principale raison du partitionnement de l'index est de réduire la taille de l'index qui doit être lu. De plus, placer les partitions dans différents espaces table peut améliorer la disponibilité et la fiabilité des partitions.
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!