Как сделать быстрый поиск в Postgres - PullRequest
0 голосов
/ 05 мая 2018

У меня есть база данных Postgresql с более чем 100 миллиардами строк в одной таблице.

Схема таблицы следующая:

 id_1                   | integer                     |           | not null | 
 id_2                   | bigint                      |           | not null | 
 created_at             | timestamp without time zone |           | not null | 
 id_3                   | bigint                      |           |          | 
 char1                  | character varying(20)       |           | not null | 
 lang                   | character(6)                |           | not null | 
 gps                    | point                       |           |          | 
 some_dat               | character varying(140)[]    |           |          | 
 JSON                   | jsonb                       |           | not null | 
  • Я пытаюсь найти внутри объекта JSON и отсортировать данные по объекту JSON, но проблема в том, что для сортировки и возврата данных требуется слишком много времени.

  • Также при сортировке данных, например, по created_at, для результата также требуется время.

Я пытаюсь подать заявку в режиме реального времени.

У меня есть 2 индексации для id_1 и id_2

Кроме того, я пытался использовать материализованное представление для каждого (id), но проблема в том, что обновление материализованного представления также занимает много времени. Любые предложения, пожалуйста?

Я использую PostgreSQL 10.3 на сервере Linux с SSD и 128 ГБ оперативной памяти.

Спасибо

1 Ответ

0 голосов
/ 06 мая 2018

Если вы хотите отсортировать результат запроса с помощью следующего выражения:

ORDER BY expr1, expr2, ...

Вам нужен следующий индекс для ускорения сортировки:

CREATE INDEX ON atable ((expr1), (expr2), ...);

Если это не сработает, поскольку выражения содержат функции, отличные от IMMUTABLE, вы не можете ускорить сортировку с помощью индекса. В этом случае попробуйте переписать запрос с IMMUTABLE выражениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...