Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как быстрее?  [new]
AlexDoul
Member

Откуда: Екатеринбург
Сообщений: 30
Доброго времечка!

В связи с наличием объемных запросов стараюсь по возможности проводить их оптимизацию и вновь создаваемые запросы писать как-то аккуратнее. При всем этом есть еще и залинкованные серверы, от которых данные идут медленно.
Возник вопрос: как быстрее будет происходить выполнение запроса (где меньше будет пересылки данных, затрат ресурсов и т.п.):
1. вариант1
select a.*
from table1 a
join table2 b on a.id1 = b.id1

2. вариант2
select *
from table1
where id1 in (select id1 from table2)

Рассуждения такие мои: join возвращает полный набор столбцов присоединенной таблицы - то есть чем больше столбцов, тем больше ресурсов-времени. Когда столбцов мало, то коррелирующий запрос показывает меньшее время, чем join (из проведенных тестов).

Какой вариант все же предпочтительней? Ваши мнения?
6 июл 11, 06:40    [10929259]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
AlexDoul,

Не надо гадать на кофейной гуще - сравните планы выполнения запросов
6 июл 11, 07:13    [10929278]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
AlexDoul
Member

Откуда: Екатеринбург
Сообщений: 30
Ken@t
AlexDoul,

Не надо гадать на кофейной гуще - сравните планы выполнения запросов


Согласен в Вами полностью!
С чтением планов знаком, честно признаться, плохо, но процентовка стоимости у блоков оказалась одинаковой. Единственное, обратил внимание в статистике на состав возвращаемых полей - при join-не из таблицы2 возвращается полный набор, а при in (...) возвращаются значения только соответствующего столбца.
На какие данные следует в первую очередь обращать внимание?
6 июл 11, 07:24    [10929288]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
AlexDoul
Рассуждения такие мои: join возвращает полный набор столбцов присоединенной таблицы
Сомнееваюсь. Одинаково.
AlexDoul
Какой вариант все же предпочтительней? Ваши мнения?
Первый
6 июл 11, 09:35    [10929601]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
AlexDoul,

вариант1 и вариант2 - это совершенно разные запросы,
в общем случае дающие разный результат.

Это всё равно, что сравнивать гвозди с шурупами.
6 июл 11, 09:36    [10929602]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
AlexDoul
Member

Откуда: Екатеринбург
Сообщений: 30
iap
AlexDoul,

вариант1 и вариант2 - это совершенно разные запросы,
в общем случае дающие разный результат.

Это всё равно, что сравнивать гвозди с шурупами.


я не написал (моя вина), но подразумевается, что отношение таблиц 1-1 создано по полю id1
если принять это во внимание, то почему это разные наборы будут? В первом варианте вывод идет только из первой таблицы, во втором варинате - тоже самое.
Коли соединение по inner идет, то если пары нет, то и вывода не будет....
Поясните, пожалуйста, в чем разница "гвоздей" и "шурупов".
6 июл 11, 09:51    [10929675]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
AlexDoul
iap
AlexDoul,

вариант1 и вариант2 - это совершенно разные запросы,
в общем случае дающие разный результат.

Это всё равно, что сравнивать гвозди с шурупами.


я не написал (моя вина), но подразумевается, что отношение таблиц 1-1 создано по полю id1
если принять это во внимание, то почему это разные наборы будут? В первом варианте вывод идет только из первой таблицы, во втором варинате - тоже самое.
Коли соединение по inner идет, то если пары нет, то и вывода не будет....
Поясните, пожалуйста, в чем разница "гвоздей" и "шурупов".
Как соотносится это
AlexDoul
я не написал (моя вина), что отношение таблиц 1-1 создано по полю id1
и это
AlexDoul
Поясните, пожалуйста, в чем разница "гвоздей" и "шурупов".
???
И как отвечать в таких условиях?

Если понимать буквально, то между гвоздями и шурупами много общего - шляпка, острый конец, вытянутая форма.
Отличий, казалось бы немного - гвоздь цилиндрический, шуруп - конусообразный, гвоздь гладкий, шуруп с резьбой.
Но эти различия обусловливают разные области применения.

Хотя некоторые блондинки забивают обычно шурупы молотком.
6 июл 11, 10:03    [10929760]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
AlexDoul
Member

Откуда: Екатеринбург
Сообщений: 30
если отношение "..." - "ко многим было" - то тогда согласен - результирующие наборы отличались бы количеством строк.
6 июл 11, 10:05    [10929772]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
AlexDoul
iap
AlexDoul,

вариант1 и вариант2 - это совершенно разные запросы,
в общем случае дающие разный результат.

Это всё равно, что сравнивать гвозди с шурупами.


я не написал (моя вина), но подразумевается, что отношение таблиц 1-1 создано по полю id1
если принять это во внимание, то почему это разные наборы будут? В первом варианте вывод идет только из первой таблицы, во втором варинате - тоже самое.
Коли соединение по inner идет, то если пары нет, то и вывода не будет....
Поясните, пожалуйста, в чем разница "гвоздей" и "шурупов".

iap написал: "в общем случае".

Ваше "подразумевается, что отношение таблиц 1-1" - частный случай.
В этом частном случае, результат будет одинаковый.
А "кто быстрее" зависит от того, какой план выберет оптимизатор. Во втором варианте выше вероятность выбора неудачного плана.
6 июл 11, 10:07    [10929786]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
NETClient
Member

Откуда:
Сообщений: 461
Всегда удивлялся вопиющему ламеризму этой ветки форума.
6 июл 11, 10:24    [10929952]     Ответить | Цитировать Сообщить модератору
 Re: Как быстрее?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
AlexDoul, частично связанный топик
6 июл 11, 16:45    [10933840]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить