@dailysse

Запрос к базе данных?

Доброго времени суток. Структура бд:
CREATE TABLE testTable (
    id              serial,
    date          int,
    testField1 smallint,
    testField2 real,
    val            smallint,
    PRIMARY KEY(id)
);


Мне нужно выбрать последнюю по дате запись в группировке по testField1 и testField2 и потом сложить значения val по группировке по testField1
Запрос:
SELECT SUM(val), testField1 FROM (
    SELECT DISTINCT ON (testField1, testField2) testField1, testField2, val FROM testtable ORDER BY testField1, testField2, date DESC
) t1 GROUP BY testField1


Все хорошо отрабатывает и дает нужный мне результат, но если запрос нужен с условиями вида:
SELECT SUM(val), testField1 FROM (
    SELECT DISTINCT ON (testField1, testField2) testField1, testField2, val FROM testtable ORDER BY testField1, testField2, date DESC
) t1 where testField1 in (1,5,50,10,19) and testField2 in (5,8,10,13) GROUP BY testField1

То запрос выполняется на порядок больше.
Index:
CREATE INDEX testIndex on testtable (testField1, testField2, date desc)


Так вот, как это можно оптимизировать и делать эти выборки быстрее. В базе около 10 миллионов документов. И постоянно растет. testField1 от 1 до 1500, testField2 от 1 до 1500. БД Postgresql 9.6.2. Заранее спасибо за ответ
  • Вопрос задан
  • 241 просмотр
Пригласить эксперта
Ответы на вопрос 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
EXPLAIN (ANALYZE, BUFFERS) что говорит?
Ответ написан
Ваш ответ на вопрос

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

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