Задать вопрос
@nurzhannogerbek

Как ускорить запрос с DISTINCT в PostgreSQL?

Здравствуйте, товарищи! Помогите пожалуйста разобраться.

Есть довольно простой скрипт. Выглядит он следующим образом:

SELECT DISTINCT("CITY" || ' | '  || "AREA" || ' | ' || "REGION") AS LOCATION FROM youtube


Таблица youtube, которая используется в запросе состоит из 25 миллионов записей. Каждые 5 минут таблица пополняется новыми данными. Данный скрипт отрабатывается очень долго (~50 секунд).

EXPLAIN ANALYZE возвращает следующее:
5c08ad6f72b89825570616.png

Я пытаюсь ускорить запрос. Добавил индекс следующим образом:

CREATE INDEX location_index ON youtube ("CITY", "AREA", "REGION")


После добавление индекса запрос не ускорился. Возможно в самом запросе нужно явно указать, чтобы использовался индекс. Как это сделать в PostgreSQL? Знаю, что к примеру в MySQL для этого используется FORCE INDEX. Есть ли вообще смысл в индексе или партиционирование раз в запросе не используется WHERE.
  • Вопрос задан
  • 1990 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя Сергей Горностаев К ответам на вопрос (3)
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
Составной индекс по полям - это не то же самое, что индекс по конкатенированному значению этих полей. Соответствующий индекс должен создаваться так

CREATE INDEX youtube_location_idx ON youtube ((CITY || ' | '  || AREA || ' | ' || REGION));

Но ещё лучше пересмотреть подход к структуре таблицы и запросов.
Ответ написан