Estoy bastante seguro de que esto no se puede hacer en Oracle, pero me gustaría que se demuestre que está equivocado ...¿Alguna base de datos permite que se creen simultáneamente varios índices en la misma tabla?
Digamos que tengo una gran tabla con muchas columnas y quiero crear índices en una docena de columnas. Usando Oracle, desencadenaría varias declaraciones secuenciales de create index
y apagaría y herviría el hervidor.
Cada create index
necesita escanear todas las filas de la tabla para formar el índice.
es decir, 10 índices = 10 escaneos completos.
Usted pensaría que una optimización obvia sería escanear la tabla una vez e indexar las 10 columnas al mismo tiempo. ¿No es así?
create indexes on mytable (
ix_mytable_cola (cola),
ix_mytable_colb (colb),
ix_mytable_colc (colc)
);
Tan obvio que debe haber una gran razón por la que no está allí.
¿Alguna idea?
Pude disparar cada create index
simultáneamente en sesiones separadas y espero que la memoria caché del búfer de la base de datos haya guardado el día, pero parece una posibilidad remota.
EDITAR
no he tenido una respuesta definitiva por lo que la misma pregunta en Oracle-L:
http://www.freelists.org/post/oracle-l/Creating-multiple-indexes
consenso general fue que no está disponible pero tal vez sea una característica útil. La respuesta más útil fue de David Aldridge, quien sugirió que si las instrucciones de creación de índice se iniciaran al mismo tiempo, entonces Oracle haría 'lo correcto'.
no he visto ninguna base de datos que soporta eso. Tal vez sea porque asumieron que los índices se crearían por adelantado, donde esto no sería un problema y no cuando la tabla tenga varios GB de datos ;-) –
Nunca he usado Oracle, así que esto probablemente sea irrelevante. De todos modos, ¿no puedes crear una nueva tabla vacía con la misma estructura y los índices requeridos y luego completarla desde tu original? Esto puede hacer o no lo que está pidiendo y, por supuesto, duplicará temporalmente los requisitos del disco. Todavía podría funcionar :) – noodl
Si entendí bien, le gustaría crear índices dinámicamente, pero ¿cuál es la razón por la que no puede tener índices de antemano? – Leonid