TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2455 2.34K
🚀 SQL: индекс есть, но база специально его игнорирует

Есть индекс:



CREATE INDEX idx_users_status ON users(status);


И запрос:


SELECT *
FROM users
WHERE status != 'active';

Кажется, что индекс должен ускорить поиск.

Но если условие возвращает большую часть таблицы, индекс может оказаться дороже обычного Seq Scan.

Например, если 'active' — только 10% строк, то:


status != 'active'


вернёт примерно 90% таблицы.

В таком случае базе дешевле один раз последовательно прочитать таблицу, чем прыгать по индексу к огромному количеству строк.

Проверить можно так:


EXPLAIN ANALYZE
SELECT *
FROM users
WHERE status != 'active';


Смотреть нужно не только на наличие индекса, а на селективность условия.

Особенно часто это проявляется с:


<>
NOT IN
IS NOT NULL


Индекс может быть идеальным, но если запрос выбирает почти всю таблицу, оптимизатор вполне разумно его проигнорирует.
  • 👍 7
  • 🔥 5
  • ❤ 1
  • 🥰 1
More from @sqlhub
  1. Sep 21, 2026🧩 Сложная SQL-задача: симуляция DNS-кеша Есть таблица запросов: CREATE TABLE dns_requests…
  2. Sep 18, 2026🔥 PostgreSQL 19 задерживается релиз может сдвинуться на несколько недель или даже месяцев…
  3. Sep 17, 2026Участвуй во всероссийском ИТ-чемпионате МТС True Tech Champ 2026 c призовой фондом 10 250…
  4. Sep 17, 2026📌 NY Post: Anthropic - это культ Профессор Вашингтонского университета Педро Домингос в и…
  5. Sep 16, 2026Post #2492
  6. Sep 16, 2026Стать специалистом по Data Science всего за 10 недель — это реально! Если давно смотрите в…
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 →