Наиболее зрелый первый шаг — снять трассировку, найти запросы и затем настроить выборочную загрузку связей. Число 35 само по себе ещё не объясняет причину задержки.
Нет. Узким местом могут быть лишние строки, неудачный JOIN, сортировка, блокировки, N+1 или передача данных. Индекс полезен только если план запроса сможет выгодно его использовать.
Расскажите о конкретном медленном запросе, его плане и изменении индекса: состав, порядок колонок, частичный предикат или покрытие. Снижение p95/p99 подтверждают измерениями до и после.
Начните с требований витрины и выделения бизнес-сущностей: товар, вариант, продавец, предложение, категория. Затем объясните таблицы, ключи и связи на реальном проекте, не придумывая их количество.
Обновления одной строки становятся горячей точкой: конкурирующие транзакции ждут блокировку или получают конфликт. 10 000 запросов не выполнят изменение одной строки параллельно без координации.
В PostgreSQL 11+ постоянный DEFAULT 'active' обычно добавляется без переписывания всех 50 млн строк. Однако ALTER TABLE всё равно требует сильной блокировки и может остановить конкурирующие запросы.
Минимальная схема включает покупателей, товары, заказы и позиции заказа. Позиции связывают заказ с товарами и сохраняют количество и цену на момент покупки.
Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.
PostgreSQL сочетает MVCC для видимости версий строк, блокировки для конкурентных изменений и WAL для восстановления. WAL записывает изменения раньше соответствующих страниц данных на диске.
Назовите реальную нормальную форму и объясните, какие зависимости устраняли. Для прикладных схем частая отправная точка — 3НФ, но степень нормализации выбирают по данным и нагрузке.
Такую структуру можно использовать для слоистой архитектуры: api — HTTP, application — сценарии, domain — бизнес-правила, inf — адаптеры БД, очередей, кеша и внешних API.
Посмотрите EXPLAIN: Index Scan, Index Only Scan или Bitmap Index Scan указывают на использование индекса. EXPLAIN ANALYZE дополнительно показывает фактическое выполнение.