Таблица разделена по месяцам, а запрос читает почти все партиции
Таблица разделена по месяцам, а запрос читает почти все партиции В плане: Append -> Seq Scan on events_2026_01 -> Seq Scan on events_2026_02 ... -> Seq Scan on events_2026_12 Не начинайте с индексов. Partition pruning определяет, какие партиции могут содержать строки. Индекс определяет, как читать данные внутри оставшейся партиции. Проверьте: — ключ и границы партиционирования; — фактический WHERE; — типы ключа и параметров; — функции и cast над ключом; — значения параметров в реальном запросе; — enable_partition_pruning; — число дочерних узлов под Append; — какие узлы реально выполнялись. Артефакты EXPLAIN: лишние партиции отсутствуют → pruning мог пройти при планировании Subplans Removed: N → под-планы могли быть исключены при инициализации (never executed) → узел не запускался при выполнении Append сам по себе не доказывает проблему. Subplans Removed не обязан появляться при любом успешном pruning. never executed нужно оценивать вместе с loops. Prepared statements тоже не отключают pruning автоматически: партиции могут исключаться позже, когда параметры известны. Типичная ошибка — добавить индексы на каждую дочернюю таблицу, не выяснив, почему PostgreSQL не исключил лишние партиции. Вывод: сначала отбор партиций, потом способ доступа внутри них. Сохраните признаки, по которым в плане видно, что проблема начинается до выбора индекса — на этапе отбора партиций. #УЦФОРС #PostgreSQL #SQL #Партиционирование #ПроизводительностьБД