TGViewer
Postgres Professional Postgres Professional @postgres_pro · 3.53K subscribers
Post #1455 1.66K
Когда запрос в PostgreSQL тормозит, хочется добавить индекс. Но иногда это не лечит причину: индекс хранит лишнее, занимает место, замедляет запись или вообще не нужен, потому что схема уже знает, что подходящих строк нет.

Разберем три такие ситуации.

1️⃣ Результат заранее пустой

Если в таблице есть check-ограничение с тарифами free и pro, строк со значением Pro там быть не может. При constraint_exclusion = on PostgreSQL использует это знание и не сканирует таблицу зря.

2️⃣ Запросу не нужна вся точность колонки

Если отчет строится по дням, индекс по timestamp хранит лишние часы, минуты и секунды. Индекс по выражению с датой занимает меньше места и дает запросу нужную точность.

3️⃣ Уникальность нужна, большой B-Tree — нет

Для длинных URL уникальный B-Tree может разрастись почти до размера таблицы. Если на URL не ссылаются внешние ключи и не нужен ON CONFLICT DO UPDATE, уникальность можно проверять через exclusion constraint и hash-индекс. Так индекс получается намного меньше.

У каждого приема есть цена: constraint_exclusion тратит больше времени на планирование, индекс по выражению ломается от другого синтаксиса, а hash-индекс через exclusion constraint подходит не всем сценариям уникальности.

Но в этом и смысл. Оптимизация начинается с вопроса: что именно мешает запросу работать быстрее? Лишнее сканирование, лишняя точность, слишком большой индекс или неявное знание, которое схема уже хранит, но планировщик не использует.

Когда ответ понятен, решение оказывается проще и дешевле, чем добавление еще одного индекса.

📜 Подробности читайте на Хабре.

📢 Читайте нас в MAX
  • ❤‍🔥 4
  • ❤ 4
  • 👍 2
  • 🔥 1
More from @postgres_pro
  1. Sep 24, 2026🚀 Показываем, как перенести тяжелые отчеты 1С на реплику Postgres Pro Enterprise для 1С и…
  2. Sep 23, 2026⏰ Через час, в 11:00 по Москве, начнем вебинар «Postgres Pro Backup Enterprise: от бэкапа…
  3. Sep 22, 2026🌅 Утро вечера мудренее. Особенно если завтра 23 сентября и последний день приема докладов…
  4. Sep 22, 2026Tarkett перенесла 1С и 1С:ЗУП с Microsoft SQL Server на Postgres Pro Enterprise для 1С — н…
  5. Sep 21, 2026🗂️ От бумажных картотек до поиска по смыслу — как базы данных стали основой цифровых серв…
  6. Sep 18, 2026Post #1681
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →