Jestem prawie pewien, że nie da się tego zrobić w Oracle, ale chciałbym, aby okazało się, że jest to niewłaściwe ...Czy dowolne bazy danych umożliwiają jednoczesne tworzenie wielu indeksów z tej samej tabeli?
Powiedz, że mam ogromną tabelę z wieloma kolumnami i chcę utworzyć indeksy kilkanaście kolumn. Korzystając z Oracle, odpalałem kilka następujących po sobie instrukcji i wychodziłem i gotowałem czajnik.
Każdy obiekt create index
musi przeskanować każdy wiersz w tabeli, aby utworzyć indeks.
tj. 10 indeksów = 10 pełnych skanów.
Można by pomyśleć, że oczywistą optymalizacją byłoby jednorazowe zeskanowanie tabeli i jednoczesne indeksowanie 10 kolumn. Czy nie?
create indexes on mytable (
ix_mytable_cola (cola),
ix_mytable_colb (colb),
ix_mytable_colc (colc)
);
Tak oczywiste, że musi istnieć doskonały powód, dla którego go nie ma.
Wszelkie pomysły?
Mogłem odpalać każdy create index
jednocześnie w oddzielnych sesjach i mam nadzieję, że pamięć podręczna bufora bazy danych została zapisana w dniu, ale wydaje się być długim ujęciem.
EDIT
nie dostać ostateczną odpowiedź, więc to samo pytanie na Oracle-L:
http://www.freelists.org/post/oracle-l/Creating-multiple-indexes
Ogólny konsensus było to, że nie jest dostępny, ale będzie może być użyteczną funkcją. Najbardziej użyteczną odpowiedzią był David Aldridge, który zasugerował, że jeśli wszystkie instrukcje indeksu create zostałyby uruchomione w tym samym czasie, to Oracle "postąpiłby słusznie".
Nie widziałem żadnej bazy danych, który obsługuje to. Może dlatego, że założyli, że indeksy zostaną utworzone z góry, gdzie nie byłoby to problemem, a nie, gdy tabela ma kilka GB danych ;-) –
Nigdy nie korzystałem z Oracle, więc prawdopodobnie nie będzie to miało znaczenia. W każdym razie nie możesz utworzyć nowej pustej tabeli o tej samej strukturze i wymaganych indeksach, a następnie wypełnić ją z oryginału? To może, ale nie musi, zrobić to, o co prosisz, a to oczywiście podwoi zapotrzebowanie na dysk tymczasowo. Nadal może zadziałać :) – noodl
Jeśli dobrze rozumiem, chciałbyś dynamicznie tworzyć indeksy, ale z jakiego powodu nie możesz wcześniej mieć indeksów? – Leonid