две колонки: updated_at (timestamp with timezone, not null), deleted_at (timestamp with timezone)
Есть запрос вида:
select
*
from mytable mt
where
mt.updated_at >= :time or
(mt.deleted_at is not null and mt.deleted_at >= :time)
Какие корректные индексы должны быть для того, чтобы этот запрос работал быстро?
И аналогичный вопрос по следующей ситуации:
select
*
from myparenttable mpt
left join mytable mt
on
mt.parent_id = mpt.id and
mt.deleted_at is null
какой индекс должен быть для того, чтобы join отрабатывал максимально быстро?
Если нужны будут какие-то дополнительные вводные – напишите пожалуйста, предоставлю
1. Никакой не поможет. Будет seqscan с сортировкой. А действительно нужно такое странное условие сортировки? Может быть это всё таки часть where clause? 2. Скорее всего индекс по mytable.parent_id
1. Да, простите, случайно перепутал блоки. Там должен быть where :) 2. А будет ли значительная разница по partial index по where deleted_at is not null и обычному index в данном случае?
Поправил первый запрос
Обсуждают сегодня