Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ProBiotek Member Откуда: Moscow Сообщений: 907 |
Привет. Подскажите пожалуйста какой запрос будет более правильным и почему. select 1 from Tab1 t1 join Tab2 t2 on t1.T2_id = t2.id and t2.id > 3000 select 1 from Tab1 t1 join Tab2 t2 on t1.T2_id = t2.id where t2.id > 3000 Различие в том, что фильтр к t2 применяется либо в условии джоина, либо в Where. |
11 сен 15, 16:09 [18138809] Ответить | Цитировать Сообщить модератору |
AlanDenton Member [скрыт] Откуда: Сообщений: 1004 |
особой разницы нет именно в данном случае. во всяком случае до соединения с таблицей tab1 оптимизатор должен отфильтровать tab2 > 3000. |
11 сен 15, 16:13 [18138833] Ответить | Цитировать Сообщить модератору |
Гадя Петрович Member Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали Сообщений: 52912 |
привычка пихать фильтрацию в условия соединения может сыграть с вами злую шутку в случае, если эти соединения будут внешними |
11 сен 15, 16:16 [18138853] Ответить | Цитировать Сообщить модератору |
ProBiotek Member Откуда: Moscow Сообщений: 907 |
ok. Т.е. правильней в джоины записывать только исключительно условия соединения, а в Where - любую фильтрацию ? В принципе я так и предполагал. Думаю движок базы сначала применит различные ограничивающие фильтры в условиях Where, а потом то, что осталось будет джойнить. |
11 сен 15, 16:26 [18138942] Ответить | Цитировать Сообщить модератору |
хе-хе )
Guest |
ProBiotek, Не правильно думаете. Условие в соединение и в where оцениваются как одно |
11 сен 15, 16:35 [18139009] Ответить | Цитировать Сообщить модератору |
ProBiotek Member Откуда: Moscow Сообщений: 907 |
хе-хе ), Тогда разницы нет куда фильтр пихать ? Для каждой строки таблицы вычисляется фильтрация один раз - но сразу все, что ее касается ? |
11 сен 15, 16:43 [18139069] Ответить | Цитировать Сообщить модератору |
хе-хе )
Guest |
Для внутреннего соединения нет. Для внешнего есть, это логично Я часто пихаю в join. т.к логически получаю именованный набор |
||
11 сен 15, 16:51 [18139110] Ответить | Цитировать Сообщить модератору |
ProBiotek Member Откуда: Moscow Сообщений: 907 |
это следует читать как "все что связано, находится рядом" ? или я не правильно понял эту часть фразы ? |
||
11 сен 15, 16:54 [18139123] Ответить | Цитировать Сообщить модератору |
в том, что фи
Guest |
ProBiotek, в данном конкретном случае разница только стилистическая как лучше - смотря какая семантика этих фильтров если по смыслу этой 3000 возможен фильтр left join и в условии соединения > 3000, то это доп.условие соединения если нет, то это просто фильтрация соединенного и место ему в where |
11 сен 15, 23:29 [18140858] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
Схемы таблиц незабывайте писать |
12 сен 15, 12:29 [18141725] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |