Por lo que yo sé (this page) Oracle crea automáticamente un índice para cada una declaración clave UNIQUE o PRIMARY. ¿Es esta una lista completa de casos cuando los índices se crean automáticamente en Oracle?¿En qué casos se Oracle crear índices de forma automática?
Respuesta
Intentaré consolidar las respuestas dadas y convertirla en wiki de la comunidad.
Así índices se crean automáticamente por Oracle para estos casos:
- APC: Para clave principal y clave única a menos que ya existen tales índices.
- APC: Para el almacenamiento LOB y XMLType.
- Gary: Para mesa con una tabla anidada.
- Jim Hudson: Para materializado vista.
Sí, esa es la lista completa. Oracle crea automáticamente un índice para cada declaración UNIQUE o PRIMARY KEY.
Según la [respuesta aceptada] (http://stackoverflow.com/a/2192193/521799) esa no es la lista completa ... –
En primer lugar, Oracle no siempre crea un índice cuando creamos una clave primaria o única. Si ya existe un índice en esa columna se utilizará en su lugar ...
SQL> create table t23 (id number not null)
2/
Table created.
SQL> create index my_manual_idx on t23 (id)
2/
Index created.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SQL>
... MY_MANUAL_IDX
en cuenta que no es un índice único; no importa ...
SQL> alter table t23
2 add constraint t23_pk primary key (id) using index
3/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SQL> drop index my_manual_idx
2/
drop index my_manual_idx
*
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key
SQL>
Hay otro caso cuando Oracle creará automáticamente un índice: el almacenamiento de LOB ....
SQL> alter table t23
2 add txt clob
3 lob (txt) store as basicfile t23_txt (tablespace users)
4/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SQL>
edición
La trata de bases de datos XMLType igual que otros LOB ...
SQL> alter table t23
2 add xmldoc xmltype
3/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SYS_IL0000556081C00004$$
SQL>
No he hecho Oracle por unos años, pero me parece recordar que Oracle podría utilizar un índice compuesto, si el campo se establece en único (o una clave principal?) fue el primer campo. Podría estar recordando mal, o podría haber cambiado desde la línea 8i, así que sugeriría probarlo si esto fuera útil. (para evitar tener un índice adicional y tomar el hit por escrito) – Joe
Un ejemplo siempre es bueno para entender. – Guru
@Joe - sí, tu recuerdo es correcto. – APC
No, estamos cada vez más cerca, pero esa no es una lista completa aún.
También se creará un índice automáticamente cuando cree una vista materializada ya que Oracle necesita poder identificar rápidamente las filas al realizar una actualización rápida. Para las vistas materializadas basadas en rowid, usa I_SNAP $ _tablename. Para clave primaria vistas materializadas, se utiliza el nombre de PK original, con las modificaciones necesarias para que sea único.
create materialized view testmv
refresh force with rowid
as select * from dual;
select index_name from user_indexes where table_name = 'TESTMV';
Index Name
--------------
I_SNAP$_TESTMV
Y otro, si crea una tabla con una tabla anidada que presentamos lo mejor un índice creado automáticamente. El almacenamiento basado en objetos en general puede hacer esto ya que puede haber tablas ocultas creadas.
Creo que los XMLTypes basados en esquema también lo harán.
- 1. no crear colas de forma automática en NServiceBus
- 2. ¿Alguna base de datos admite la creación automática de índices?
- 3. Caída automática y recreación de índices actuales
- 4. ORACLE: cómo puedo crear índices que se usarán cuando NLS_COMP = Lingüística y NLS_Sort = Binary_CI
- 5. ¿Cómo elegir y optimizar los índices de Oracle?
- 6. ¿Necesito crear índices en claves externas?
- 7. ¿En qué casos se debe usar new.env para crear un nuevo entorno?
- 8. Índices agrupados SQL Server
- 9. ¿Buenas prácticas para usar índices inversos en claves sustitutas? (Oracle)
- 10. Cocoa NSIndexSet: Índices múltiples. ¿Cómo crear el conjunto de índices, múltiples índices?
- 11. rendimiento de Oracle con múltiples mismos índices de columnas
- 12. Hibernate crear tablas en la base de datos de forma automática
- 13. ¿Forma óptima de crear una distribución de histograma/frecuencia en Oracle?
- 14. ¿Maven Surefire ejecuta casos de prueba secuencialmente de forma predeterminada?
- 15. Forma automática de poner todas las clases en archivos separados
- 16. ¿Cómo entran en juego los índices cuando se utiliza una vista?
- 17. oracle: ¿qué afirmaciones se deben comprometer?
- 18. ¿Qué son los índices hipotéticos?
- 19. Oracle crear tabla con comentarios de columna
- 20. ¿En qué casos necesitamos una herencia protegida?
- 21. ¿Los índices se chupan en SQL?
- 22. ¿Cuál es la forma correcta de rastrear índices en python?
- 23. En qué casos estará HTTP_REFERER vacío
- 24. Reiniciar el dispositivo USB de forma automática en Windows
- 25. Tengo javax.inject en mi pom.xml, ¿lo utilizará de forma automática?
- 26. ¿Es posible crear mi propia 'variable automática'?
- 27. ¿Qué es objc_setAssociatedObject() y en qué casos debería usarse?
- 28. Crear índice en la tabla existente Oracle
- 29. ¿Qué casos de uso para OWL?
- 30. Índices de SQL Server: ¿qué columnas incluir en el índice?
El caso de "almacenamiento LOB" probablemente también resulte en índices para otros tipos de datos complejos. Aunque no he probado esto. Esperaría que los índices fueran creados por Oracle Spatial, Oracle Text, etc. –
Es wiki de la comunidad. Si quiere agregar algo, simplemente puede editar esta respuesta. –