Почему падение индекса занимает больше времени, чем его создание?

8

В postgresql я добавил индекс к большой таблице, и потребовалось около 1 секунды (что, честно говоря, меня удивило).

Когда я пошел, чтобы отбросить индекс, я разрешил ему работать за 200 секунд без его возврата и, наконец, отменил операцию сбрасывания.

CREATE INDEX idx_cservicelocationdivisionstatus_inversed
ON cservicelocationdivisionstatus (cservicelocationdivisionid, startdate, enddate DESC);

Занимает очень мало времени, но

DROP INDEX idx_cservicelocationdivisionstatus_inversed;

Взял так долго, что я сдался и отменил.

Таблица cservicelocationdivisionstatus имеет 6 столбцов и около 310 тыс. строк данных.

Почему удаление индекса занимает гораздо больше времени, чем его создание?

EDIT: Эта страница указывает, что для mySql таблица с несколькими индексами скопирует таблицу и повторно вставляет все строки без индекса, который вы отбрасываете. (Хуже того, с mySql, если вы поместите несколько индексов в одну и ту же таблицу, он будет повторно копировать таблицу один раз для каждого выбранного вами индекса вместо того, чтобы быть умным и повторно копировать данные один раз без всех индексов, которые вы dropping.) Что-то вроде этого происходит с postgres?

    
задан Martin Carney 13.10.2014 в 20:04
источник

1 ответ

15

Индекс таблицы, о которой вы упомянули, как правило, может быть быстро удален (и, конечно, быстрее, чем 3 + минуты). Мне кажется, что таблица / индекс использовалась, и поэтому ее нельзя было отбросить.

Вы можете подтвердить, что, обратившись к таблице pg_stat_activity и ищите активность, включающую таблицу, в которой вы создали индекс.

    
ответ дан khampson 13.10.2014 в 20:13