создайте индекс, не блокируя DB

У меня есть таблица с 10 + миллион строк. Я должен создать индекс на отдельном столбце, однако, индекс занимает много времени для создания этого, я получаю блокировки против таблицы.

Может быть важно отметить, что индекс создается как часть 'граблей db:migrate' шаг... Я не являюсь неблагоприятным созданию индекса вручную, если это будет работать.

ОБНОВЛЕНИЕ: Я предполагаю, что должен был упомянуть что это запись часто таблица.

8
задан Richard 28 June 2010 в 19:32
поделиться

2 ответа

вы можете предотвратить блокировку, используя что-то вроде этого (псевдокод):

create table temp like my_table;
update logger to log in temp;
alter table my_table add index new_index;
insert into my_table select * from temp;
update logger to log in my_table;
drop table temp

Где регистратором будет то, что добавляет строки / обновления в вашу таблицу при регулярном использовании (например, скрипт php). Это создаст временную таблицу для использования во время обновления другой.

2
ответ дан 5 December 2019 в 23:13
поделиться

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

0
ответ дан 5 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: