@6pirule

Как правильно подсчитать примерное количество строк через EXPLAIN?

Есть больша таблица. Нужно посчитать примерное количество строк, которые подходят под выражение WHERE.
В случае, если подходящих строк больше чем 9612, то EXPLAIN выдает корректное примерное значение rows.
Если подходящих строк меньше чем 9612, например 5000 (или даже 5), то EXPLAIN выдает: rows=9612
Что я делаю не так?

EXPLAIN SELECT COUNT(*)
FROM mat_view
WHERE gen_doc @@ plainto_tsquery('english', 'any example');
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Поизучайте как именно работает статистика планировщика. Ну, например, https://habrahabr.ru/company/pgdayrussia/blog/329542/
Есть default_statistics_target (дефолт 100) и именно столько штук самых популярных конкретных значений отслеживается в most_common_vals и most_common_freqs. Что можно сказать про все остальные значения? (число разных значений есть - n_distinct) Что они как-то могут быть распределены по (100%-sum(most_common_freqs)) оставшимся строкам. В сущности, в статистике нет других значений кроме most_common_vals и потому нельзя сказать, есть ли вообще хоть одно искомое значение. А как они там распределены, если есть? Да кто их знает. Планировщик предполагает, что примерно равномерно.

Соответственно можно крутить default_statistics_target для конкретного поля или индекса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы