Неиспользуемый индекс в PostgreSQL

Сейчас изучаю индексирование в PostgreSQL. Я начал пытаться создать свой индекс и анализировать, как это повлияет на время выполнения. Я создал несколько таблиц с такими столбцами:

Неиспользуемый индекс в PostgreSQL

Неиспользуемый индекс в PostgreSQL

Кроме того, я заполнил их данными. После этого я создал свой собственный индекс:

create index events_organizer_id_index on events(organizer_ID);

и выполнил эту команду (таблица событий содержит 148 строк):

explain analyse select * from events where events.organizer_ID = 4;

Я был удивлен, что поиск был выполнен без моего индекса, и я получил такой результат:

Неиспользуемый индекс в PostgreSQL

Насколько я знаю, если бы мой индекс использовался в поиске, то был бы текст типа «Сканирование индекса по событиям». Итак, может ли кто-нибудь объяснить или дать ссылки на сайты, пожалуйста, как эффективно использовать индексы и где я должен их использовать, чтобы увидеть различия?

Сколько строк существует в вашей таблице events?

D-Shih 05.04.2022 12:27

@D-Shih, 148 рядов

Dark_Phoenix 05.04.2022 12:28

Это почти пустая таблица, которая замедлит запрос при использовании индекса. Добавьте больше данных, чтобы получить реальные цифры

Frank Heikens 05.04.2022 12:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из «Строки, удаленные фильтром: 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 Кбайт может быть много строк.

Итак, база данных сначала ищет в индексе адрес блока, затем ищет блок на диске, читает его и разбирает нужную строку.

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

Другие вопросы по теме