![]() |
|
Модераторы: skyboy |
![]()
|
|
| setnull |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
Все здравствуйте!!!
Интересует такой нюанс: в чем технически разница между условиями в блоке соединения таблиц и блоке where запроса. (при условии, что логическая разница отсутствует к примеру, чем запрос
отличается от запросов
Думаю, это еще зависит и от конкретной СУБД? Спасибо!!! |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
в случае с inner join - where выполняется после всех соединений. а условия on - в момент соединения. то есть, если будет join трех таблиц по 1000 записей, то вариант с where сначала построит декартово произведение миллиарда записей, а потом их отфильтрует. А использование ON после первого соединения выдаст не 1000 * 1000 записей, а сколько соответствует условию. И второе соединение с третьей таблицей уже будет оперировать меньшим количеством записей.
в случае с left join, в общем случае, у тебя вообще разные результаты получатся. а вот приведенный тобою пример быссмысленен:
это действительно, "эмуляция" inner join, но с большими тормозами. потому что строится декартово произведение, а потом уже его фильтруют. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Чем вызван интерес? семантикой. Абсолютно правильно думаешь. Обсуждение этой темы бессмысленно на уровне, абстрагированном от платформы. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
skyboy, SQL выражение декларирует форму и вид получаемого набора, но никоим образом не декларирует способ получения этого набора. Какие операции будут выполнены и в какой последовательности определяет SQL машина на основании правил, заложенных в ней. у меня есть все основания полагать что оракл все три запроса выполнит одинаково.
ЗЫ Недавно похожая тема обсуждалась ЗЫЫ Это не эмуляция, это обфускация. Это сообщение отредактировал(а) Zloxa - 28.9.2009, 11:59 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| setnull |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
вот живой пирмер:
Есть таблица t1. Из нее нужно выбрать записи, с которыми возможно соединить записи (через вторую t2) с одной из двух других таблиц t3 и t4. t1->t2->t3 либо t1->t2->t4 Что будет лучше всю попроисоединять к t1 и посмотреть, где это получилось, либо сделать выборку из t1, а в where указать два excists'а? или вообще сделать union? Конкретно меня интересует ситуация с MySql. Но также хотелось бы узнать, есть ли какие-нибудь общие критерии, закономерности? |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Добавлено через 2 минуты и 39 секунд Пробуй, мерий. Общего случая нет. На разных объемах будут разные результаты. Мне лично кажется что два экзиста должны быть шустрее. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 2 Всего: 54 |
setnull, какая структура таблиц (с указанием полей по которыйм производиться соединение), а так же критерий для CASE или EXISTS?
-------------------- Слава Україні! |
|||
|
||||
| setnull |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 3.7.2007 Репутация: нет Всего: 1 |
у меня вопрос больше общего характера... но струтура
Нужно вибрать записи из t1, соответствующие ограничениям по filter1, и при этом также имеющие соответствующие записи в таблицах t3 либо t4, в свою очередь фильтруемые filter3 и filter4 |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |