Какой индекс создать в Postgres? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть таблица:

row_id          attr_id    attr_val
180000001       100        test1
180000001       101        test2
180000001       102        test3
180000001       103        test4
180000001       104        test5
180000002       100        test6
180000002       101        test7
180000002       102        test8
180000002       103        test9
180000002       104        test10

В ней более 5 миллиардов строк, а размер таблицы составляет около 1,4 ТБ. Я обычно запускаю следующий запрос:

select * from table1 where rec_id = 180000002;

и

select * from table1 where rec_id = 180000002 and va_id = 100;

Какой тип индекса я должен применять в Postgres, чтобы быть наиболее эффективным, учитывая пространство и мой вариант использования?

1 Ответ

1 голос
/ 27 апреля 2020

Для этих запросов вам нужен следующий индекс: (rec_id, va_id).

Вы действительно имеете в виду select *? Если вы можете сократить количество столбцов в предложении select до нескольких столбцов, то вы можете также добавить их в индекс.

Например, такой запрос:

select col1, col2 from table1 where rec_id = 180000002 and va_id = 100;

Будет полезен индекс (rec_id, va_id, col1, col2): это делает индекс , охватывающий , если база данных сможет выполнить его полностью, просматривая только индекс.

...