Как правильно расставить индексы в PostgreSQL (база фильмов)?

Ребят помогите пожалуйста с запросом.
Решил проект перевести на PostgreSQL (9.4). Но с этой базой пока на "вы". Создаю несколько индексов но в одном запросе индекс используется а в другом уже нет.

Ниже выборка, скажите по каким полям я должен поставить индекс?
genres и countries вроде как гин индекс должен быть?

  1. SELECT title FROM movies WHERE type='films' AND is_open=1 ORDER BY publish DESC LIMIT 10
  2. SELECT title FROM movies WHERE type='films' AND is_open=1 AND genres && ARRAY[1] ORDER BY publish DESC LIMIT 10
  3. SELECT title FROM movies WHERE type='films' AND is_open=1 AND genres && ARRAY[1] AND countries @> ARRAY[1] ORDER BY publish DESC LIMIT 10
  4. SELECT title FROM movies WHERE type='films' AND is_open=1 AND genres && ARRAY[1] AND countries @> ARRAY[1] AND year IN(2013,2014) ORDER BY publish DESC LIMIT 10


На данный момент такие индексы:
CREATE INDEX movies_genres_idx ON movies USING gin (genres)
CREATE INDEX movies_countries_idx ON movies USING gin (countries)
CREATE INDEX movies_type_open_idx ON movies USING btree (type, is_open)
CREATE INDEX movies_type_open_pub_idx ON movies USING btree (type, is_open, publish)
  • Вопрос задан
  • 2448 просмотров
Пригласить эксперта
Ответы на вопрос 1
@SashaSkot
Специалист широкого профиля
Вы бы написали для начала какие индексы у вас уже есть.
Вместо "films" лучше сделать ссылку на справочник типов видео контента так, чтобы это поле было целочисленным, будет чуть шустрее работать на малом количестве данных и быстрее на большОм, чем строковое сравнение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы