@Artem0071
Безработный mr. Junior

Как правильно составить индексы?

Добрый день
Есть большая таблица, по которой должна производиться частая выборка

Структура таблицы:
id,parent_id,custom_name,released_at, ....

И запрос:
select *
from cards
where ("parent_id" is null or "custom_name" is not null or "released_at" > now()) and ...

Сделал explain по запросу и там:
->  Seq Scan on cards  (cost=0.00..233142.26 rows=325284 width=8)
            Filter: ((parent_id IS NULL) OR (custom_lang IS NOT NULL) OR (released_at > now()))


Сделал индексы на эти поля - узнал что с null они не работают
Сделал еще составной индекс cards(parent_id, custom_lang, released_at) - стало чуть быстрее, но explain не поменялся, все так же тот самый Filter в Seq Scan

Сделал еще cards(parent_id, custom_lang, released_at) where parent_id is null and custom_lang is not null - стало еще чуть быстрее, но все равно совершенно не достаточно. Все так же Filter в Seq Scan

Как можно еще как то оптимизировать запрос?
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы