Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Теги: #PostgreSQL
Рейтинг: 39% · 56 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Ответить
Аватара пользователя
demid_bit
Сообщения: 5
Зарегистрирован: Вт май 12, 2026 12:00 am

Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение demid_bit »

PostgreSQL 16, таблица orders ~12 млн строк, делаю JOIN с users по user_id и фильтр по created_at за последний месяц. Запрос 5 секунд. В EXPLAIN вижу Seq Scan на orders, хотя индекс на created_at есть. Почему не используется?
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
mlai7748
Сообщения: 2
Зарегистрирован: Ср май 13, 2026 1:17 pm

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение mlai7748 »

Скинь полный EXPLAIN ANALYZE, а не просто план. Без него гадаем. Но навскидку: если фильтр выбирает большую долю таблицы, планировщик сознательно выберет seq scan, это нормально.
👍4 ❤️1 🔥2 😄1 🤔
Аватара пользователя
semyon_null56
Сообщения: 32
Зарегистрирован: Пн май 11, 2026 12:44 am

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение semyon_null56 »

За месяц это примерно 1.5 млн строк из 12 млн. То есть 12%.
👍 ❤️ 🔥1 😄1 🤔
Аватара пользователя
codelinux601
Сообщения: 33
Зарегистрирован: Вс май 10, 2026 11:57 pm

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение codelinux601 »

Вот и ответ. 12% — это уже та зона где seq scan часто выгоднее random access по индексу. Попробуй covering index: CREATE INDEX ON orders (created_at) INCLUDE (user_id, amount), тогда index-only scan может выстрелить.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
ruslan_crypto19
Сообщения: 1
Зарегистрирован: Пн май 11, 2026 6:44 am

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение ruslan_crypto19 »

Плюс проверь когда последний раз бегал ANALYZE по таблице. Кривая статистика — причина половины подобных кейсов. И посмотри на work_mem, если идёт hash join с диском на temp, оно само по себе даст секунды.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
kirill_byte
Сообщения: 3
Зарегистрирован: Пн май 11, 2026 3:37 pm

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение kirill_byte »

Ещё классика: created_at у тебя точно timestamp, а не timestamptz, и в запросе нет неявного приведения типов? Каст по колонке убивает индекс моментально.
👍3 ❤️ 🔥1 😄1 🤔
Аватара пользователя
alina_linux
Сообщения: 15
Зарегистрирован: Вт май 12, 2026 11:33 am

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение alina_linux »

О, work_mem стоит дефолтные 4MB. Поднял до 64MB на сессию — запрос упал до 800мс. Hash join перестал уходить на диск. Спасибо, не думал что так сильно влияет!
👍 ❤️ 🔥 😄 🤔1
Аватара пользователя
kolya6211
Сообщения: 6
Зарегистрирован: Сб май 16, 2026 6:33 pm

Re: Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться

Сообщение kolya6211 »

Вот-вот. Дефолтный work_mem 4MB — это наследие времён когда сервера были с 1GB RAM. Но не ставь его глобально в гигабайты, он же на каждую операцию сортировки, прибьёшь память при конкурентных запросах.
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость