Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Всем привет !

Плиз влияет ли перестановка условий сравнения в INNER JOIN? Если да, то на что?
Хочу понять теорию. Table1 < 1 000 000, Table2 < 10 000 000

Исходный запрос
SELECT *
FROM table1 t1 INNER JOIN table2 t2 ON  t1.col1 = t2.col1


После перестановки запрос
SELECT *
FROM table1 t1 INNER JOIN table2 t2 ON  t2.col1 = t1.col1
12 май 13, 00:00    [14283074]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
по идее - не должен влиять
на практике - случаи бывают разные
12 май 13, 00:33    [14283147]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Testor1
Плиз влияет ли перестановка условий сравнения в INNER JOIN? Если да, то на что?
Не влияет в принципе, но если запрос большой, то может повлиять, потому что оптимизатор не может просмотреть все варианты...
12 май 13, 01:30    [14283180]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
alexeyvg
Testor1
Плиз влияет ли перестановка условий сравнения в INNER JOIN? Если да, то на что?
Не влияет в принципе, но если запрос большой, то может повлиять, потому что оптимизатор не может просмотреть все варианты...
Спрашивают же не про порядок таблиц в джойнах,
а про операнды оператора "=".
12 май 13, 11:36    [14283476]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
iap
alexeyvg
пропущено...
Не влияет в принципе, но если запрос большой, то может повлиять, потому что оптимизатор не может просмотреть все варианты...
Спрашивают же не про порядок таблиц в джойнах,
а про операнды оператора "=".



Как правильно писать ? Как в первом или во втором случае?

При написании селектов с большим числом JOIN-ов не соблюдаю каких-то правил. Вот и хочу понять, чем это грозит и как правильней.
12 май 13, 12:03    [14283504]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Автор, Вы разницу в планах уже смотрели или еще нет?
12 май 13, 12:18    [14283519]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Паганель
Автор, Вы разницу в планах уже смотрели или еще нет?


Нет. Честно говоря и не хочу. Хочу от специалистов знать как правильно и почему. Я не могу при написании каждого селекта экспериментами заниматься. Да и результаты нескольких тестов могут дать ложное представление.
12 май 13, 12:29    [14283533]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
ну не хотите как хотите
12 май 13, 12:36    [14283543]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Паганель
ну не хотите как хотите


Как вас учили правильно?
12 май 13, 12:45    [14283554]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Testor1
Паганель
ну не хотите как хотите


Как вас учили правильно?
смотреть разницу в планах
12 май 13, 12:50    [14283564]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Паганель
Testor1
пропущено...


Как вас учили правильно?
смотреть разницу в планах


На каждый составляемый селект вы делает анализ плана запроса ? и исходя из этого принимаете в какой последовательности делать сравнение ? а то что план запроса на среде разработчика может отличаться от продуктивной среды где данных в десятки или сотни раз больше. Там как ?

Я не спорю с вами. Но метод научного тыка, мне кажется не самый лучший. Существует же рекомендации и обоснования для них. Надеюсь, еще кто-то поделиться своим опытом. Вопрос реально простой, но нужен ответ от людей которую знают теорию и опробовании ее на практике.
12 май 13, 13:42    [14283676]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Testor1
На каждый составляемый селект вы делает анализ плана запроса ?
Именно так и только так.
Со временем это не особо будет нужно. А точнее будете смотреть сразу на пачку запросов. И вы научитесь смотреть не тратя и 5 секунд на всё.
Как тольк вы будете смотреть и вникать у вас отпадут почти все вопросы.
12 май 13, 16:37    [14284028]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Testor1
На каждый составляемый селект вы делает анализ плана запроса ? и исходя из этого принимаете в какой последовательности делать сравнение ? а то что план запроса на среде разработчика может отличаться от продуктивной среды где данных в десятки или сотни раз больше. Там как ?
Если запросы простые, то разработчик представляет, какие будет планы, и строит правильные индексы (и в этом случае порядок JOIN не важен).

Если запросы сложные, то да, нужно смотреть планы выполнения, в том чмсле на продакшен-системе, на реальных данных.
Testor1
Я не спорю с вами. Но метод научного тыка, мне кажется не самый лучший. Существует же рекомендации и обоснования для них. Надеюсь, еще кто-то поделиться своим опытом. Вопрос реально простой, но нужен ответ от людей которую знают теорию и опробовании ее на практике.
Есть поверие, что нужно писать таблицы начиная от тех, для которых есть условия-фильтры, в конце прицеплять таблицы-справочники.
Хотя наверное есть и другие правильные методы :-)

Но вопрос не такой простой, как кажется; это в общем особенности оптимизатора, синтаксического анализатора и т.п., это "вещь в себе". Рекомендаций с обоснованием на этот счёт точно нет.
12 май 13, 16:39    [14284031]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Mnior и alexeyvg

Давно переписываемся.

Плиз ответьте
Из вашей практики когда вы пишите процедуры (много) с join-нами и до начала их оптимизации, то какой вариант используете #1 или #2? Или по настроению?


Вариант #1
SELECT *
FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 = t2.col1


Вариант #2
SELECT *
FROM table1 t1 INNER JOIN table2 t2 ON t2.col1 = t1.col1
12 май 13, 17:27    [14284107]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Testor1
Плиз ответьте
Из вашей практики когда вы пишите процедуры (много) с join-нами и до начала их оптимизации, то какой вариант используете #1 или #2? Или по настроению?
В данном случае для производительности, плана запроса это всё равно, кому как нравится по читаемости.

Я строго придерживаюсь варианта 2
12 май 13, 17:42    [14284130]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
alexeyvg
Testor1
Плиз ответьте
Из вашей практики когда вы пишите процедуры (много) с join-нами и до начала их оптимизации, то какой вариант используете #1 или #2? Или по настроению?
В данном случае для производительности, плана запроса это всё равно, кому как нравится по читаемости.

Я строго придерживаюсь варианта 2


Я тоже придерживаюсь варианта 2.

Кстати я заметил, что в случае LEFT JOIN не имеет значение в какой последовательности сделано сравнение, но имеет значение в какой последовательности прописаны таблицы в LEFT JOIN. К примеру эти два варианта выдают одинаковый результат. И они одинаковы по плану исполнения. Получается, что перестановка мест в сравнении ни на что не влияет ?


Вариант №1
SELECT *
FROM table1 t1 LEFT JOIN table2 t2 ON t1.col1 = t2.col1

Вариант №2
SELECT *
FROM table1 t1 LEFT JOIN table2 t2 ON t2.col1 = t1.col1
12 май 13, 17:55    [14284150]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Testor1
Получается, что перестановка мест в сравнении ни на что не влияет ?


Теоретически - не влияет
опыт подсказывает - бывает всякое.
12 май 13, 18:25    [14284202]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
locky
Testor1
Получается, что перестановка мест в сравнении ни на что не влияет ?


Теоретически - не влияет
опыт подсказывает - бывает всякое.


а есть под рукой пример того когда есть влияние?
мне для опыта.
12 май 13, 19:28    [14284274]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Testor1
locky
пропущено...


Теоретически - не влияет
опыт подсказывает - бывает всякое.


а есть под рукой пример того когда есть влияние?
мне для опыта.

Повторяемого - нет
12 май 13, 20:24    [14284430]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Testor1
имеет значение в какой последовательности прописаны таблицы в LEFT JOIN
Вы это серьёзно? Естественно имеет, а как же.

Это всё равно, что сказать "я заметил, что если написать а=в-с или а=с-в, то результат получается разный"
Testor1
К примеру эти два варианта выдают одинаковый результат. И они одинаковы по плану исполнения. Получается, что перестановка мест в сравнении ни на что не влияет ?
Естественно, не влияет, это же семантически одно и то же. Про влияние мы говорили о ошибках и особенностях сиквела, это проявляется редко, и зараннее это не спрогнозировать.

Достаточно знать, что такое может быть, и всё.
Testor1
а есть под рукой пример того когда есть влияние?
мне для опыта.
Пример должен включать и данные, и некую статистику, в общем, повторяемый и передаваемый результат получить достаточно сложно.
12 май 13, 22:45    [14284923]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Testor1
какой вариант используете #1 или #2?
#2.
Но эти варианты почти не показывают принципы описания запросов. Поцарапали верхушку айзберга.
Оно семантически понятно, чаще всего пишется "звязда", пишется то от "ядра", от более известного ...
Запросы классифицируются и это обусловливает наилучшую формальность и тем самым наивысшую скорость чтения ...

#1 пишет Йода словно так.
Testor1
Из вашей практики когда вы пишите процедуры (много) с join-нами
Процедуры и "много" и "с джоинами" не пушу (очень редко). Не люблю говнокодить. Много джоинов в основном только в Представлениях.
12 май 13, 23:51    [14285109]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Mnior
Testor1
какой вариант используете #1 или #2?
#2.
Но эти варианты почти не показывают принципы описания запросов. Поцарапали верхушку айзберга.
Оно семантически понятно, чаще всего пишется "звязда", пишется то от "ядра", от более известного ...
Запросы классифицируются и это обусловливает наилучшую формальность и тем самым наивысшую скорость чтения ...

#1 пишет Йода словно так.
Testor1
Из вашей практики когда вы пишите процедуры (много) с join-нами
Процедуры и "много" и "с джоинами" не пушу (очень редко). Не люблю говнокодить. Много джоинов в основном только в Представлениях.


Где можно почитать про "звязда" и "ядра" :) ?

Много джоинов в основном только в Представлениях.
View - не снижают производительность ?

Раньше я тоже пытался тяжелые селекты с джойнами перенести в View, но столкнулся с тем, что такие VIEW работают медленее в запросах, чем тем же оригинальные джойны.
13 май 13, 08:57    [14285762]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Testor1,

Всем спасибо за поддержку и ответы !
13 май 13, 08:58    [14285765]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Где можно почитать про "звязда" и "ядра" :) ?

Схема данных - основная таблица фактов и много справочников, завязанных на нее через связями ФК таблицы фактов - ПК справочника. Более общий случай - снежинка, когда справочник может иметь, в свою очередь, еще несколько подсправочников, для которых он является основной таблицей фактов. Ядро - самая детальная таблица фактов. Обычно на диаграмме БД такие схемы имеют вид звезды или снежинки, за что и названы.
13 май 13, 09:11    [14285805]     Ответить | Цитировать Сообщить модератору
 Re: Перестановка места в INNER JOIN-е  [new]
Testor1
Member

Откуда:
Сообщений: 679
Программист-Любитель
Где можно почитать про "звязда" и "ядра" :) ?

Схема данных - основная таблица фактов и много справочников, завязанных на нее через связями ФК таблицы фактов - ПК справочника. Более общий случай - снежинка, когда справочник может иметь, в свою очередь, еще несколько подсправочников, для которых он является основной таблицей фактов. Ядро - самая детальная таблица фактов. Обычно на диаграмме БД такие схемы имеют вид звезды или снежинки, за что и названы.


Так и живем :)
13 май 13, 09:41    [14285890]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить