TGViewer
Product Developer Product Developer @product_developer · 12K subscribers
Post #70 2.35K
​​Есть ли смысл в индексе, если выгребаем треть таблицы?

После вебинара мне и организаторам писали, что я не прав: индекс по валюте используется даже если в запросе выгребается треть таблицы при равномерном распределении трёх валют по таблице счетов. Причем аргументировали: заполнили таблицу равномерно, сняли планы запросов, приложили скрины.

Очень круто, что вскопали так глубоко! Напомню, вопрос был: имеет ли смысл индекс по currency? Прежде, чем я признаюсь, что меня раскусили, предлагаю посмотреть план запроса. Вникать в план — как раз то, что двигает мидла в сеньора :)

Давайте посмотрим, что мы могли бы увидеть в плане.

1️⃣ Index Only Scan — Cамый производительный вариант. Это когда все нужные для запроса данные находятся в индексе (индекс по нескольким колонкам) или покрыты индексом (covering index).

2️⃣ Index Scan — Классический вариант. Поиск по индексу + доступ к таблице. Тут останавливаться не будем.

3️⃣ Sequence scan. Ну тут всё понятно, перебираем данные в таблице

4️⃣ Bitmap Index Scan + Bitmap Heap Scan. Как раз наш третий вариант. Он возможен благодаря тому что данные хранятся в куче (heap).
Если в двух словах, то это значит, что по индексу БД составит битовую карту блоков, отметит блоки содержащие нужные данные и затем просканирует эти блоки в таблице. В некоторых случаях это более эффективно, чем sequence scan. А еще это позволяет использовать несколько индексов при поиске. Короче, механика крутая.

Казалось бы, обмазаться индексами и будет Bitmap Scan с использованием всех возможных индексов на таблице) Но напомню про оверхед на обслуживание индекса, и то что Bitmap scan всё еще "чуть лучше" чем Sequence scan. Посмотрите на cost: для sequence scan он 0..56, а для bitmap heap scan 14..51.

Вот вам еще один аспект в трейд-оффе для принятия решения об использовании индекса. Решать, как всегда, вам :)

Вот статья из цикла про EXPLAIN: https://habr.com/ru/post/276973/ В ней более детально описана механика Bitmap Heap Scan с примерами.
More from @product_developer
  1. Sep 12, 2026Автономность команды. Больше = лучше? Обычно автономность преподносится как безусловное до…
  2. Sep 8, 2026Почему AI-агенты не заменят кожаных Disclaimer: постов будет 2, второй — «Почему заменят»…
  3. Sep 4, 2026Avito.Tech.Conf — 26 сентября, Москва, бесплатно Бесплатных конференций вам в ленту! Спике…
  4. Jul 30, 2026AI-агенты — это ответ! А какой был ваш вопрос? Все бегут в разработку через AI. Во-первых,…
  5. Jul 21, 2026Доставка смс в самолёт Сижу в самолёте. С интернетом, что само по себе — чудо, которое уже…
  6. Jul 20, 2026С этими вашими AI агентами мы снова попали на дикий запад Момент времени Т-4: Когда-то дав…
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 →