ООП - Зло, плохие объекты


8 0

Свежий видосик ООП - Зло и что с этим делать


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Jeka Sylar

10 Июня 2020

Миша а подскажите как реализовать поиск по всем разделам сайта в symfony, у меня только получается по одной таблцие posts а по другом нет  


Михаил Фленов

10 Июня 2020

Ну у меня обычно только одна таблица, с постами. Если у тебя их несколько, то можно привести сначала в единый формат, а потом искать по нему, что-то типа такого:

select *
from (
    select title, content, date from Posts
    union
    select title, content, date from Stories
) r
where r.Title like '%sdfg%'

С точки зрения производительности в принципе должно быть терпимо, если у тебя не миллиарды записей в каждой из таблиц


Александр Р.

10 Июня 2020

Наверное, более оптимизировано будет select title, content, date from Posts where r.Title like '%sdfg%' union select title, content, date from Stories where r.Title like '%sdfg%'


Александр Р.

10 Июня 2020

r.Title заменил на просто Title: select title, content, date from Posts where Title like '%sdfg%' union select title, content, date from Stories where Title like '%sdfg%'. Может, базе легче будет сначала отфильтровать и объединить маленькие результаты, чем объединить большие результаты, а потом отфильтровать.


Михаил Фленов

11 Июня 2020

С точки зрения оптимизации в данном случае результат будет один и тот же, по крайней мере SQL сервер прекрасно увидит, что идея одинакова. А вот если нужно показать 20 записей и отсортировать по времени, то результат будет разный. В твоем случае будет показаны 20 записей из Posts, а в моем будет микс, если отсорировать по Date:

select top 20 *
from (
    select title, content, date from Posts
    union
    select title, content, date from Stories
) r
where r.Title like '%sdfg%'
order by date


Александр Р.

12 Июня 2020

В моем коде top 20 можно сделать так:
select top 20 *
from (
    select title, content, date from Posts
    where Title like '%sdfg%'
    union
    select title, content, date from Stories
    where Title like '%sdfg%'
) r
order by date
но если MS SQL умеет оптимизировать твой запрос, то твой запрос проще выглядит.


Александр Р.

12 Июня 2020

Я хотел спросить. Допустим, есть 2 больших таблицы
select t1.*, t2.*
from t1
inner join t2 on t1.id = t2.id
where t1.date between 10.06.2020 and 12.06.2020
есть ли смысл фильтровать до join:
select t1.*, t2.*
from (select * from t1 where t1.date between 10.06.2020 and 12.06.2020) t1
inner join t2 on t1.id = t2.id
в MS SQL?


Михаил Фленов

12 Июня 2020

Предпоследний комментарий:
На 99% уверен, что where дважды и один раз снаружи будут выполняться одинаково сервером. По любому серверу придется бежать по обеим таблицам отдельно, а потом объединять результат.

Последний комментарий:
На 99% уверен, что разницы не будет. По любому серверу придется искать данные в t1 по фильтру, а потом пристыковывать результат от t2, а каким образом будет стыковка - loop, merge или hash будет зависеть от статистики. а не от того, как ты написал запрос. Хотя бывают случаи, сервер некорректно прочитает твой запрос, ступит и падает в банальный loop, как в самый надежный, но не всегда производительный. Пиши как в первом случае, чем проще напишешь, тем больше шансов, что SQL сервер правильно поймет, какой тебе результат нужен


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне