@wawa

Как ускорить SELECT с высокой вариативностью высокоселективных WHERE и сортировкой?

Есть табличка T с полями A, B, C и D.
Тип полей не так важен, главное, что к ним применимы опреатры сравнения больше/меньше (int,float,timestamp,...).
Запросы к этой таблицы имеют следующие вариации:
1) Всегда применяется сортировка (ASC или DESC) по одному любому полю из перечисленных.
2) Возможны ограничения min/max (как только min, только max, так и оба) для любых из перечисленных полей в любых комбинациях.

При определенном кол-ве строк всё работает медленно. В этом и проблема.

Что уже сделано:
1) Построены b-tree индексы по всем полям, что дало прекрасный результат в ускорении запросов где:
а) происходит только сортировка
б) вместе с сортировкой применяются низкоселективные ограничения
в) когда высокоселективное ограничение применяется к тому же полю, по которому идет сортировка
В принципе результат предсказуемый.

Наверное уже ясно когда возникают проблемы. А именно при высокоселективных ограничениях по полю, отличному от поля сортировки.
Селективность таких ограничений может быть и нулевой. Тогда вообще труба.
Проблема не кажется мне уникальной. Как с ней бороться?
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
@wawa Автор вопроса
Всем спасибо. Мне уже помогли.
Проблема в том, что дефолтное default_statistics_target=100 маловат для гистограмм по моей таблице с 4 млн строк. Поставил на 1000, пересчитал стату, и теперь pg строит планы разумнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы