Работает ли индекс timescaledb так же, как postgreSQL? - PullRequest
0 голосов
/ 31 мая 2018

Я тестирую расширение PostgreSQL с именем Timescaledb для данных временных рядов.Если я правильно прочитаю документ PostgreSQL, запрос, например

WHERE x = 'somestring' and timestamp between 't1' and 't2'

, будет лучше всего работать с индексом (x,timestamp).И выполнение EXPLAIN для этого SQL-запроса показывает, что он работает.

Когда я пытаюсь выполнить тот же запрос для гипертаблицы Timescaledb, которая содержит те же данные и без индекса (x,timestamp).Производительность примерно такая же (если не лучше).После создания индекса (x,timestamp) производительность не улучшается.

Я понимаю, что у гипертаблицы есть встроенный индекс метки времени.Итак, у меня должна быть другая стратегия для добавления индекса в таблицу, например, индекс только с (x).Это правильно?

1 Ответ

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

Несколько вещей о том, как TimescaleDB обрабатывает запросы:

  1. Основной способ повышения производительности запросов на основе времени - исключение чанков.Данные делятся по времени на порции, поэтому при выполнении запроса для определенного временного диапазона планировщик может игнорировать порции, в которых есть данные за пределами этого временного диапазона.Индексы затем применяются для кусков, которые ищутся.

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

  2. Если вашВ запросах совпадает большое количество проверяемых строк в чанках. Планировщик запросов может выбрать последовательное сканирование вместо сканирования индекса для сохранения операций ввода-вывода https://github.com/timescale/timescaledb/issues/317.

  3. Нет ничегоОсобенность встроенных индексов заключается в том, что вы можете отбрасывать индексы после создания гипертаблицы или отключать их при запуске create_hypertable (см. временные шкалы API ).

...