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