Сейчас изучаю индексирование в PostgreSQL. Я начал пытаться создать свой индекс и анализировать, как это повлияет на время выполнения. Я создал несколько таблиц с такими столбцами:
Кроме того, я заполнил их данными. После этого я создал свой собственный индекс:
create index events_organizer_id_index on events(organizer_ID);
и выполнил эту команду (таблица событий содержит 148 строк):
explain analyse select * from events where events.organizer_ID = 4;
Я был удивлен, что поиск был выполнен без моего индекса, и я получил такой результат:
Насколько я знаю, если бы мой индекс использовался в поиске, то был бы текст типа «Сканирование индекса по событиям». Итак, может ли кто-нибудь объяснить или дать ссылки на сайты, пожалуйста, как эффективно использовать индексы и где я должен их использовать, чтобы увидеть различия?
@D-Shih, 148 рядов
Это почти пустая таблица, которая замедлит запрос при использовании индекса. Добавьте больше данных, чтобы получить реальные цифры


Из «Строки, удаленные фильтром: 125» я вижу, что в таблице событий слишком мало строк. Просто добавьте пару тысяч строк и повторите попытку.
от документы
Use real data for experimentation. Using test data for setting up indexes will tell you what indexes you need for the test data, but that is all.
It is especially fatal to use very small test data sets. While selecting 1000 out of 100000 rows could be a candidate for an index, selecting 1 out of 100 rows will hardly be, because the 100 rows probably fit within a single disk page, and there is no plan that can beat sequentially fetching 1 disk page.
В большинстве случаев, когда база данных использует индекс, она получает только адрес, по которому находится строка. Он содержит данные block_id и смещение, поскольку в одном блоке размером 4 или 8 Кбайт может быть много строк.
Итак, база данных сначала ищет в индексе адрес блока, затем ищет блок на диске, читает его и разбирает нужную строку.
Когда строк слишком мало, они помещаются в один из нескольких блоков данных, что упрощает и ускоряет БД чтение всей таблицы без использования индекса вообще.
Сколько строк существует в вашей таблице
events?