powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Индексы на поля с foreign key
13 сообщений из 13, страница 1 из 1
Индексы на поля с foreign key
    #39700117
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, провел тесты по производительности выборок с джоинами двух таблиц по foreign key
Выборки на таблицах с количествами от 2 миллионов записей.
Замерял выборки с по индексированным полям и без индексов.
Не увидел никакой разницы. Может я что то не корректно делал, но вопрос остался: Нужно ли в Postgre индексировать поля с foreign key или так сойдет? Помогите с квалифицированным ответом!
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700149
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,

Так зависит же от запросов... покажите запросы покажите их планы и будет все видно.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700168
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,

я грит библиотеку грузил в самосвал
совковой лопатой
и что интересно --
наличие шкафов и алфавитных указателей не ускорило...
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700177
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
Да, конечно
запрос: SELECT sy.sysname
FROM public.temp_sys as sy
left join public.temp_category on public.temp_category.categoryid = sy.categoryid

схема во вложении
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700178
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewewMaxim Boguk,
Да, конечно
запрос: SELECT sy.sysname
FROM public.temp_sys as sy
left join public.temp_category on public.temp_category.categoryid = sy.categoryid

схема во вложении

1)если у вас FK с sy.categoryid на temp_category.categoryid - то индекс по temp_category.categoryid у вас есть без вариантов иначе бы вам FK не дали создать

2)несмотря на 1) для конкретно такого запроса смысла в индексе все равно нет... просто потому что таблица public.temp_sys скорее всего сильно больше чем public.temp_category а значит план будет hash join которому что есть индекс по temp_category.categoryid что нет его - как то ну совсем без разницы. Вот если бы в public.temp_sys было 10 строк а в public.temp_category миллион то ситуация была бы другой в таком запросе но это какая то очень вымышленная ситуация.

3)более того в таком запросе на новых версиях базы при наличии FK - left join вообще не производится за полной ненужностью (даже если 10 и миллион строк).

PS: учитесь использовать explain analyze и читать планы.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700384
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewewНужно ли в Postgre индексировать поля с foreign key или так сойдет?
Сам Postgre SQL не генерит индекс по foreign key.

Перед тестами рекомендую собрать статистику по обоим таблицам
Код: plsql
1.
2.
analyze public.temp_sys;
analyze public.temp_category;



И приведенный запрос совершенно не информативный для раскрытия вопроса т.к. даные читаются только из public.temp_sys
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700605
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewewНужно ли в Postgre индексировать поля с foreign key или так сойдет?
Индексы создаются не только для улучшения некоторых выборок, но еще и для того чтобы обеспечить хорошую производительность при обновлении/удалении записей в таблице, на которую ссылается внешний ключ. Без индекса серверу придется просканировать всю таблицу чтобы обеспечить целостность FK, а это для больших таблиц очень ресурсоемкая операция.
Поэтому и рекомендуют создавать индексы на FK.
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700623
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, большое спасибо за ответ!
Понял, что единого правила по индексированию FK нет. Зависит от многих факторов.
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700825
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
Максим у меня был вопрос по индексированию поля sy.categoryid а не temp_category.categoryid
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700826
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,
То есть можно взять за общее правило то, что всегда стоит индексировать поля с FK?
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700856
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewewВладимир Затуливетер,
То есть можно взять за общее правило то, что всегда стоит индексировать поля с FK?

Дурное правило... получите очень много лишних индексов в базе.. а они сильно небесплатные.
Индекс нужен если у вас ожидаются частые удаления из temp_category (или обноления значений temp_category.categoryid)
как правило из подобных таблиц-справочников не удаляют ничего поэтому индекс именно для поддержки FK КАК ПРАВИЛО не нужен.

Для других задач вполне может быть нужен (но это другие задачи а не FK).

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39700908
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewewТо есть можно взять за общее правило то, что всегда стоит индексировать поля с FK?
Соблюдайте баланс :)
Как Максим заметил индексы не бесплатны, при большом кол-ве индексов на таблице вам нужно будет больше места для хранения данных, вставки и обновления данных будут более медленными, ну и не факт что все индексы эти будут использоваться.

У меня такие правила:
1. Для небольших и средних таблиц я всегда создаю индексы на FK. Тут нет интенсивных вставок и обновлений, данные как правило более статичны, накладные расходы от таких индексов небольшие.
2. Для больших таблиц с интенсивной нагрузкой я не делаю индексы на FK если индекс не будет нужен для каких либо запросов к этой таблице. В редких случаях вообще не создаю FK, все зависит от ситуации и на сколько большая таблица и какие требования бизнеса.

Это из моего опыта, то что у вас там я не знаю, поэтому сами смотрите создавать или нет, информации вроде бы достаточно тут сообщили по этому вопросу.
...
Рейтинг: 0 / 0
Индексы на поля с foreign key
    #39748651
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,
Спасибо за совет!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Индексы на поля с foreign key
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]