#oracle #insert #indexing
#Oracle #вставить #индексирование
Вопрос:
Можно ли создавать индекс в таблице, скажем, когда есть какие-то задачи, которые одновременно создают несколько новых строк в таблице?? Будут ли какие-либо проблемы с блокировкой???
ПРИМЕР: ТАБЛИЦА ОБРАТНОЙ СВЯЗИ -> создание индекса (Name, feedbackrule), когда одновременно происходят какие-либо вставки, это ПЛОХО?? если да, то что.
Я предполагаю, что Oracle просто не будет использовать этот индекс при выполнении вставок, позже это будет использовано.
Ответ №1:
Обычно для создания индекса требуется блокировка таблицы, поэтому все операции DML будут блокироваться; и если в таблице есть активные транзакции, когда вы инициируете создание индекса, вы, скорее всего, получите сообщение об ошибке «ORA-00054: ресурс занят и приобретается с указанием NOWAIT или истек тайм-аут».
Если таблица маленькая, это может быть не большой проблемой — транзакции будут просто заблокированы на несколько мгновений. Но если он очень большой, было бы плохой идеей пытаться создать индекс во время использования таблицы.
Однако, если вы используете Enterprise Edition, вы можете добавить ONLINE
ключевое слово в свой CREATE INDEX
оператор, что позволит выполнять транзакции с таблицей во время построения индекса. Это все равно может привести к снижению производительности.