172 похожих чатов

Всем привет у меня вопрос по оптимизации запросов в таблице есть колонка

is_deleted, которая содержит true/false
я эту таблицу хочу приджойнить к другой
вопрос, где лучше прописывать условие is_deleted=false?
для себя нашёл три варианта, но не знаю, какой будет оптимальным
вариант 1
select * from table1 t1
left join table2 t2
on t2.id = t1.t2_fk
where t2.is_deleted = false

вариант 2
select * from table1 t1
left join table2 t2
on t2.id = t1.t2_fk and t2.is_deleted = false

вариант 3
select * from table1 t1
left join (select * from table2 where table2.is_deleted = false) t2
on t2.id = t1.t2_fk

вроде бы все три варианта дают одно и тоже

3 ответов

9 просмотров

сравните планы запросов 1 и 2 вроде вообще не будут отличаться насчет 3 не уверен

третий вариант обычно никто не использует без особой необходимости, но работать он будет как вариант2, первые два - это вообще разные запросы. Если в table1.t2_fk будет ссылка на удалённую запись, то: вариант1: вы получите строчку в которой все поля из t1 будут null (да и вообще, left join здесь работает как inner join, т.е., строки с table1.t2_fk = null не вернутся) вариант2: соответствующая строчка не вернётся. И еще одно замечание: лучше писать не is_deleted = false, а not is_deleted

Во втором случае у тебя ужэ не outer (left) join, это inner join. А так первый и третий одинаковы для планировщика, второй можэт дать другие планы из-за других результатов, а в остальном — одинаков.

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

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Всем привет! Использую gitlab-ci. Настроил gitlab-agent для деплоя в куб. При деплое проекта в логах такая ошибка: Executing deploy plan failed to watch "ns:my-project/Ingress...
Konstantin Moiseev
4
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
а не подскажете вот это скрин из какой IDE ?
Iluha Companets
14
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Народ всем привет Подскажите, как включить самописные dll библиотеки в итоговую сборку Сейчас при запуске dev сервера локально формируется папка build, из которой запускается...
Андрей
4
Карта сайта