Свежий видосик ООП - Зло и что с этим делать
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Миша а подскажите как реализовать поиск по всем разделам сайта в symfony, у меня только получается по одной таблцие posts а по другом нет
Ну у меня обычно только одна таблица, с постами. Если у тебя их несколько, то можно привести сначала в единый формат, а потом искать по нему, что-то типа такого:
select *
from (
select title, content, date from Posts
union
select title, content, date from Stories
) r
where r.Title like '%sdfg%'
С точки зрения производительности в принципе должно быть терпимо, если у тебя не миллиарды записей в каждой из таблиц
Наверное, более оптимизировано будет select title, content, date from Posts where r.Title like '%sdfg%' union select title, content, date from Stories where r.Title like '%sdfg%'
r.Title заменил на просто Title: select title, content, date from Posts where Title like '%sdfg%' union select title, content, date from Stories where Title like '%sdfg%'. Может, базе легче будет сначала отфильтровать и объединить маленькие результаты, чем объединить большие результаты, а потом отфильтровать.
С точки зрения оптимизации в данном случае результат будет один и тот же, по крайней мере 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
В моем коде 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 умеет оптимизировать твой запрос, то твой запрос проще выглядит.
Я хотел спросить. Допустим, есть 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?
Предпоследний комментарий:
На 99% уверен, что where дважды и один раз снаружи будут выполняться одинаково сервером. По любому серверу придется бежать по обеим таблицам отдельно, а потом объединять результат.
Последний комментарий:
На 99% уверен, что разницы не будет. По любому серверу придется искать данные в t1 по фильтру, а потом пристыковывать результат от t2, а каким образом будет стыковка - loop, merge или hash будет зависеть от статистики. а не от того, как ты написал запрос. Хотя бывают случаи, сервер некорректно прочитает твой запрос, ступит и падает в банальный loop, как в самый надежный, но не всегда производительный. Пиши как в первом случае, чем проще напишешь, тем больше шансов, что SQL сервер правильно поймет, какой тебе результат нужен
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.