Oracle создает индекс не во временном табличном пространстве

У меня есть отличная таблица с более чем 2 000 000 000 строк. Поэтому я хочу создать индекс для столбца1:

CREATE INDEX "SCHEMA"."INDEX_TABLE1" ON "SCHEMA"."TABLE1" ("STR1") 
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS NOCOMPRESS LOGGING
STORAGE( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;

Если я выполню это, будет использовано мое временное табличное пространство, и если оно заполнено (максимум 20 ГБ), создание будет прервано.

Где моя вина в создании индекса?


person bladepit    schedule 27.05.2013    source источник
comment
Вы рассматривали возможность разбиения этой таблицы? Таким образом, вы сразу же выиграете от сокращения раздела, когда столбец, который вы используете в качестве ключа раздела, находится в предложении where. Кроме того, вы можете использовать локальные индексы, которые будут занимать меньше места и работать быстрее в сочетании с сокращением секций.   -  person André Neves    schedule 28.05.2013
comment
Единственным вариантом может быть увеличение временного табличного пространства. Для сортировки большого количества данных требуется много места на диске. Одним из возможных исключений является то, что если таблица была только что загружена, и вы знаете, что данные уже в порядке, вы можете создать индекс с параметром NOSORT.   -  person Jon Heller    schedule 29.05.2013
comment
Спасибо за ваши ответы. я попробую в будущем   -  person bladepit    schedule 31.05.2013


Ответы (1)


Из документации Oracle:

Создание большого индекса

При создании чрезвычайно большого индекса рассмотрите возможность выделения большего временного табличного пространства для создания индекса с помощью следующей процедуры:

Создайте новое временное табличное пространство с помощью оператора CREATE TABLESPACE или CREATE TEMPORARY TABLESPACE.

Используйте параметр TEMPORARY TABLESPACE оператора ALTER USER, чтобы сделать это новым временным табличным пространством.

Создайте индекс с помощью инструкции CREATE INDEX.

Отбросьте это табличное пространство с помощью оператора DROP TABLESPACE. Затем используйте оператор ALTER USER, чтобы сбросить ваше временное табличное пространство в исходное временное табличное пространство.

Использование этой процедуры может избежать проблемы расширения вашего обычного и обычно общего временного табличного пространства до неоправданно большого размера, что может повлиять на производительность в будущем.

person Jehy    schedule 19.07.2013