Есть ли какие-либо недостатки в индексации текстовой даты, например.2018-06-03 увеличить производительность запроса диапазона дат в postgresql? - PullRequest
0 голосов
/ 25 июня 2018

Рассмотрим следующую схему БД

 my_primary_id (text) primary index
 my_date (timestamp with timezone)

Есть ли способ индексировать my_date, чтобы я мог иметь быстрый запрос диапазона дат?

Моя первая мысль сделать my_date вторичный индекс, однако, немного подумав, если каждый день у меня будет от 100 до 200 тыс. элементов, количество элементов индекса my_date будет равно количеству строк, которые у меня есть.

, поскольку большойтаблица индекса -> более медленный запрос, я подумал, что, возможно, мне следует сохранить дополнительный столбец

`yyyy-mm-dd`

и индексировать его вместо этого?

Есть ли какой-либо недостаток в этом, если я могу гарантировать, что диапазон датзапрос, который я не возвращаю, не возвращает более 5% размера моей таблицы (предотвращая его с помощью сканирования seq)?

Мой шаблон запроса следующий

select * from my_table
where my_date >= my_start_date and my_date < my_end_date

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете проиндексировать часть даты временной метки, приведя ее к `date:

create index on the_table (my_date::date);

Чтобы сделать запрос использовать этот индекс, вам нужно использовать то же выражение в вашем запросе:

select *
from my_table
where my_date::date >= date '2018-01-01'
  and my_date::date < date '2018-02-01';

Я думаю, что индекс в столбце метки времени также должен использоваться, если вы сравните свой столбец со значением метки времени:

select *
from my_table
where my_date >= timestamp '2018-01-01 00:00:00'
  and my_date < timestamp '2018-02-01 00:00:00';
0 голосов
/ 25 июня 2018

Вы можете разбить таблицу по дате.Это значительно ускоряет запросы, если у вас есть миллионы записей в порядке дат и вам нужно работать только с подмножеством.

https://www.postgresql.org/docs/current/static/ddl-partitioning.html

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