TGViewer
SQL Portal | Базы Данных SQL Portal | Базы Данных @sqlportal · 13.7K subscribers
Post #2037 1.43K
По умолчанию Postgres считает столбцы, которые вместе используются в WHERE, независимыми друг от друга.
Например, для такого SQL-запроса:

SELECT *
FROM world
WHERE country = 'Japan'
AND continent = 'Asia';


планировщик оценивает количество подходящих строк, перемножая селективность каждого условия.

Допустим, селективность условия country = 'Japan' равна 0,02, а continent = 'Asia' — 0,4. Тогда общую селективность планировщик оценит как 0,008.

В действительности эти столбцы связаны, поэтому итоговая селективность равна селективности условия country = 'Japan'.

Чтобы исправить оценку, нужно явно указать корреляцию между столбцами: выполнить CREATE STATISTICS для них вместе, а затем запустить ANALYZE.

Я проверил это на тестовом датасете, результаты видны на изображении. Изначально планировщик ожидал, что запрос вернёт 784 строки, хотя фактический результат составлял 2000 строк.

После выполнения CREATE STATISTICS планировщик спрогнозировал 1983 строки — гораздо ближе к реальному результату.

👉 @SQLPortal
  • 👍 3
More from @sqlportal
  1. Oct 6, 2026Знатоки SQL и те, кто только учится, вопрос к вам Какой из этих запросов вы выберете для в…
  2. Oct 6, 2026CSRF ≠ XSS ≠ SQL-инъекция. Все три уязвимости безопасности, но механизмы атак у них разные…
  3. Oct 5, 2026Знатоки SQL: в каких случаях стоит использовать код A, а в каких — код B? 👉 @SQLPortal
  4. Oct 5, 2026Один из лучших ресурсов по производительности SQL: use-the-index-luke.com 👉 @SQLPortal
  5. Oct 4, 2026Microsoft представила обновления SQL на SQLCon Barcelona 2026 Среди главных направлений —…
  6. Oct 4, 20266 инструментов в закладки бэкенд-разработчику • Hoppscotch — тестирование API и просмотр о…
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 →