Внешний ключ без индекса

Внешний ключ без индекса

Карточка члена экипажа показывает его вахты. Открывается медленно у всех, хотя вахт у человека — десятки. crew_id — внешний ключ на ls_crew. PostgreSQL создаёт индекс под ПЕРВИЧНЫЙ ключ, но под внешний — никогда: связь объявлена, а дороги по ней нет. Двести тысяч вахт читаются целиком ради сорока строк. Постройте недостающую дорогу — и заодно избавьте план от сортировки.

Ускорьте этот запрос индексом
SELECT shift_id, duty_day, deck, hours
FROM ls_shifts
WHERE crew_id = 4242
ORDER BY duty_day

Только CREATE/ALTER/DROP — SELECT в конце не нужен.

Что считается решением

Менять можно только схему: индексы и ANALYZE. Запрос из условия остаётся как есть — присылать его не нужно.

  • в плане нет Seq Scan по ls_shifts
  • запрос читает не больше 134 страниц по 8 КБ

Проверка идёт на данных крупнее тех, что вы видите в примерах, — ответ должен держаться на объёме.

PostgreSQLv16

Здесь будет результат вашего запроса

Фокус-радио
На паузе · SomaFM · Fluid