Я сталкиваюсь с редкой ситуацией при создании и удалении индексов для таблицы, скажем, что мы создаем следующую таблицу:
create table my_table(id serial primary key, label text);
Поскольку в этой таблице содержится первичный ключ , мынаш первый индекс, в дополнение к этому давайте добавим еще один:
create index my_index on my_table(label);
А теперь некоторые данные ...
insert into my_table (label) values ('alpha');
insert into my_table (label) values ('beta');
insert into my_table (label) values ('sigma');
insert into my_table (label) values ('sigma');
insert into my_table (label) values ('alpha');
insert into my_table (label) values ('gamma');
На данный момент у нас есть два индекса, которые отлично работают, так как мыможно увидеть на следующем sql объясняет
explain analyze select * from my_table where label = 'alpha';
Bitmap Heap Scan on my_table (cost=4.20..13.67 rows=6 width=36)
(actual time=0.022..0.022 rows=2 loops=1)
Recheck Cond: (label = 'alpha'::text)
Heap Blocks: exact=1
-> Bitmap Index Scan on my_index (cost=0.00..4.20 rows=6 width=0)
(actual time=0.016..0.016 rows=2 loops=1)
Index Cond: (label = 'alpha'::text)
Planning time: 0.084 ms
Execution time: 0.046 ms
Проблема заключается в том, что если я коснусь индексов в этой точке, либо добавив третий или воссоздав my_index Iполучить боль последовательное сканирование , например:
drop index my_index;
create index my_index on my_table(label);
-- executing the same search againg
explain analyze select * from my_table where label = 'alpha';
Seq Scan on my_table (cost=0.00..1.08 rows=1 width=36)
(actual time=0.025..0.026 rows=2 loops=1)
Filter: (label = 'alpha'::text)
Rows Removed by Filter: 4
Planning time: 0.111 ms
Execution time: 0.036 ms
Насколько я понимаю, всякий раз, когда я создаю индекс, данные в таблице должны индексироваться , блокируя все операции записи всреднее время - , и это почему-то не происходит, я игнорирую, кто-нибудь знает, почему это так?
Заранее спасибо,