Hay varios tipos de índices en Oracle
Oracle proporciona varios tipos diferentes de índices para su uso. En pocas palabras, Oracle incluye los siguientes índices:
1. Índices de árbol B*
Estos son lo que yo llamo índices "tradicionales". Este es, con diferencia, el índice más utilizado en Oracle y en la mayoría de las demás bases de datos. Un árbol B* se construye como un árbol binario y proporciona acceso rápido a una fila o conjunto de filas en función de una clave, y a menudo requiere solo unas pocas lecturas para encontrar la fila correcta. Sin embargo, es importante tener en cuenta que la "B" en el "árbol B*" no representa binario, sino equilibrado. Un índice de árbol B* no es un árbol binario, como aprenderá cuando le presentemos cómo almacenar físicamente un árbol B* en el disco. Los índices de árbol B* tienen los siguientes subtipos:
Tabla organizada por índice (tabla organizada por índice): Las tablas organizadas por índice se almacenan en una estructura de árbol B*. A diferencia de las tablas de montón, donde las filas de datos se almacenan de manera no organizada (los datos se pueden colocar siempre que haya espacio disponible), los datos en IOT se almacenan y clasifican según el orden de las claves primarias. Para la aplicación, el IOT se comporta como una tabla "normal"; se requiere SQL para acceder al IOT correctamente. IoT es más útil para la adquisición de información, sistemas espaciales y aplicaciones OLAP. IoT se analizó en detalle en el capítulo anterior.
Índice de clúster de árbol B* (B*tree cluster index) Son una variante del índice de árbol B* tradicional (con solo ligeros cambios). Los índices agrupados de árbol B* se utilizan para indexar claves agrupadas (consulte la sección “Indexación de tablas agrupadas” en el Capítulo 11), por lo que no se analizarán en este capítulo. En los árboles B* tradicionales, las claves apuntan a una fila; a diferencia de la agrupación en árboles B*, una clave de agrupación apunta a un bloque que contiene varias filas relacionadas con esta clave de agrupación.
Índice descendente: el índice descendente permite ordenar los datos en la estructura del índice en orden "de mayor a menor" (orden descendente), en lugar de en orden "de pequeño a grande" (orden ascendente). Explicamos por qué los índices descendentes son importantes y explicamos cómo funcionan.
Índice de clave inversa: este también es un índice de árbol B*, excepto que los bytes de la clave se "invierten". Con un índice de clave invertida, las entradas del índice se pueden distribuir de manera más uniforme en el índice si el índice se completa con valores crecientes. Por ejemplo, si utiliza una secuencia para generar una clave principal, la secuencia generará valores como 987500, 987501, 987502, etc. Los valores son secuenciales, por lo que si se utilizó un índice de árbol B* tradicional, estos valores podrían colocarse en el mismo bloque de la derecha, lo que aumenta la contención por este bloque. Usando la clave inversa, Oracle indexará lógicamente 205789, 105789, 005789, etc. Oracle invertirá los datos almacenados antes de colocarlos en el índice, de modo que los valores que originalmente podrían ser adyacentes entre sí en el índice estarán muy separados después de la inversión de bytes. Al invertir los bytes, las inserciones en el índice se distribuyen en varios bloques.
2. Índice de mapa de bits (índice de mapa de bits)
En un árbol B*, generalmente existe una relación uno a uno entre las entradas del índice y las filas: una entrada del índice Simplemente señale una línea. Para los índices de mapas de bits, una entrada de índice utiliza un mapa de bits para señalar varias filas al mismo tiempo. Los índices de mapa de bits son adecuados para datos que son muy repetitivos y, por lo general, de solo lectura (altamente repetitivos significa que los datos tienen solo unos pocos valores distintos en relación con el número total de filas de la tabla). Considere una tabla con 1 millón de filas, donde cada columna tiene solo tres valores posibles: Y, N y NULL. Por ejemplo, si necesita contar con frecuencia cuántas filas tienen el valor Y, esto es adecuado para crear un índice de mapa de bits. Sin embargo, esto no significa que si una columna en esta tabla tiene 11.000 valores diferentes, no se pueda crear un índice de mapa de bits. Por supuesto, también se puede crear un índice de mapa de bits para esta columna.
En una base de datos OLTP, los índices de mapas de bits no se pueden considerar debido a problemas relacionados con la concurrencia (lo discutiremos más adelante). Tenga en cuenta que los índices de mapa de bits requieren Oracle Enterprise o Personal Edition.
Índice de unión de mapa de bits (índice de unión de mapa de bits): proporciona un método para desnormalizar datos en una estructura de índice (en lugar de una tabla). Por ejemplo, considere las tablas simples EMP y DEPT. Alguien puede hacer esta pregunta: "¿Cuántas personas trabajan en el departamento ubicado en Boston?" EMP tiene una clave externa que apunta al DEPT. Para contar el número de empleados en el departamento con el valor LOC de Boston, normalmente hay que completar una. La unión de tablas y la columna LOC se unen a los registros EMP para responder a esta pregunta. Al utilizar un índice de unión de mapa de bits, puede indexar la columna LOC en la tabla EMP.
3. Índice basado en funciones (índice basado en funciones)
Estos son índices de árbol B* o índices de mapa de bits, que almacenan los resultados de un cálculo de función en columnas de fila, en lugar de hacerlo. almacenar los datos de la columna en sí. Puede pensar en un índice basado en funciones como un índice en una columna virtual (o columna derivada; en otras palabras, la columna no está almacenada físicamente en la tabla); Los índices basados en funciones se pueden utilizar para acelerar consultas como SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE porque el valor FUNCTION(DATABASE_COLUMN) se ha calculado de antemano y se ha almacenado en el índice.
4. Índice de dominio de aplicación (índice de dominio de aplicación)
El índice de dominio de aplicación es un índice que usted mismo crea y almacena. Puede almacenarse en Oracle o fuera de Oracle. Debe decirle al optimizador qué tan selectivo es el índice y qué tan costoso es ejecutarlo, y el optimizador decidirá si usa su índice en función de la información que usted proporcione. Los índices de texto de Oracle son un ejemplo de un índice de dominio de aplicación; también puede crear el suyo propio utilizando las mismas herramientas que utiliza para crear índices de texto de Oracle. Cabe señalar que el "índice" creado aquí no requiere el uso de una estructura de índice tradicional. Por ejemplo, los índices de texto de Oracle utilizan un conjunto de tablas para implementar sus conceptos de índice.
5. Índice HASH
Para utilizar el índice HASH, debe utilizar el clúster HASH. Cuando crea un clúster o un clúster HASH, también define una clave de clúster. Esta clave le indica a Oracle cómo almacenar la tabla en el clúster. Al almacenar datos, todas las filas relacionadas con esta clave de clúster se almacenan en un bloque de base de datos. Si los datos se almacenan en el mismo bloque de base de datos y se utiliza un índice HASH, Oracle puede acceder a los datos ejecutando una función HASH y E/S, y aplicando un índice de árbol B de altura binaria 4, debe utilizar. 4 E/S al recuperar los datos.
Consejos: Los índices HASH son muy útiles cuando hay restricciones (es necesario especificar un valor determinado en lugar de un rango de valores).
6. Índice particionado
Un índice particionado simplemente divide un índice en múltiples fragmentos, de modo que se puede acceder a fragmentos más pequeños y estos fragmentos se pueden almacenar en diferentes discos duros (para evitar. Problemas de E/S). Tanto los índices de números B como los índices de mapas de bits se pueden particionar, pero los índices HASH no se pueden particionar.
Existen dos tipos de índices particionados: índices particionados locales e índices particionados globales. Cada tipo tiene dos subtipos, con prefijo y sin prefijo. Si se utiliza un índice de mapa de bits, debe ser un índice local.
La razón principal para particionar el índice es reducir el tamaño del índice que debe leerse. Además, colocar las particiones en diferentes espacios de tabla puede mejorar la disponibilidad y confiabilidad de las particiones.