sql >> Base de Datos >  >> RDS >> Oracle

¿Cuándo debo usar la tabla organizada de índices de Oracle? O, ¿cuándo no debería?

Básicamente, una tabla organizada por índices es un índice sin una tabla. Hay un objeto de tabla que podemos encontrar en USER_TABLES pero es solo una referencia al índice subyacente. La estructura del índice coincide con la proyección de la tabla. Entonces, si tiene una tabla cuyas columnas constan de la clave principal y, como máximo, otra columna, entonces tiene un posible candidato para ÍNDICE ORGANIZADO.

El caso de uso principal para la tabla organizada por índice es una tabla a la que casi siempre se accede por su clave principal y siempre queremos recuperar todas sus columnas. En la práctica, es más probable que las tablas organizadas por índices sean datos de referencia, asuntos de búsqueda de códigos. Las tablas de aplicaciones casi siempre están organizadas en montones.

La sintaxis permite que un IOT tenga más de una columna sin clave. A veces esto es correcto. Pero también es una indicación de que quizás debamos reconsiderar nuestras decisiones de diseño. Ciertamente, si nos encontramos contemplando la necesidad de índices adicionales en las columnas de clave no principal, entonces probablemente estemos mejor con una tabla de almacenamiento dinámico regular. Entonces, como la mayoría de las tablas probablemente necesiten índices adicionales, la mayoría de las tablas no son adecuadas para IOT.

Volviendo a esta respuesta, veo un par de otras respuestas en este hilo que proponen tablas de intersección como candidatas adecuadas para IOT. Esto parece razonable, porque es común que las tablas de intersección tengan una proyección que coincida con la clave candidata:STUDENTS_CLASSES podría tener una proyección de solo (STUDENT_ID, CLASS_ID).

No creo que esto sea de hierro fundido. Las tablas de intersección a menudo tienen una clave técnica (es decir, STUDENT_CLASS_ID). También pueden tener columnas que no sean clave (las columnas de metadatos como START_DATE, END_DATE son comunes). Además, no existe una ruta de acceso prevaleciente:queremos encontrar a todos los estudiantes que toman una clase con tanta frecuencia como queremos encontrar todas las clases que toma un estudiante, por lo que necesitamos una estrategia de indexación que admita ambos igualmente bien. No digo que las tablas de intersección no sean un caso de uso para IOT. solo que no lo son automáticamente.