Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
запрос с loop join Код: sql 1. 2. 3. 4. 5. 3 последовательных результата statistics time: Код: sql 1. 2. 3. запрос с hash join Код: sql 1. результат statistics io: Код: sql 1. 2. 3. 4. 3 последовательных результата statistics time: Код: sql 1. 2. 3. В таблице instruments 50759 строк. В таблице assettypes 11 строк, столбец assettype_id - primary key clustered. При loop join сканируется таблица instruments и для каждой ее строки считываются по две страницы таблицы assettypes - итого 101519 страницы. Т.е. для loop join характерно малое значение CPU и большое значение Reads. При hash join один раз считывается вся таблица assettypes (две страницы), создаетcя hash таблица, в которой прописывается hash ключ и RID строки. Далее поиск в assettypes производится путем вычисления hash ключа, поиска в RID в hash таблице, и чтения нужной записи. Т.е. для hash join характерно большее значение значение CPU по сравнению с loop, но меньшее значение Reads. Однако приведенный пример свидетельстует об обратном: hash join выполняется медленнее и это при том, что кол-во чтений на порядки меньше чем при loop. И, как ни страано, использование CPU при hash три раза меньше, чем при loop. Почему в этом случае hash медленне чем loop? И почему CPU при hash меньше чем при loop? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:02 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
вопрос чисто теоретический или таки какое-то реальное применение есть? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:10 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Вопрос возник из-за того, что теория расходится с практикой: кол-во чтений меньше, CPU меньше, а общее время выполнения больше. Это я замерил и привел пример для опытного запроса на небольших таблицах. В реальных запросах, на больших таблицах - отличия очень существенны. Причем сам оптимизатор выбирает hash join, но при принудительном переводе на loop join время исполнения уменьшается, при том что Read (особенно) и CPU больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:19 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
таки вы запускали тесты друг за другом? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:23 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
и да вы уверены в своих хинтах?)) а то, то что у вас написано очень смахивает на попытку подогнать оптимизатор под, то что вы хотите от него получить, а не то он должен сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:26 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Да, запускал друг за другом так, чтобы все данные были закешированы и исключить чтение с диска. daoи да вы уверены в своих хинтах?)) а то, то что у вас написано очень смахивает на попытку подогнать оптимизатор под, то что вы хотите от него получить, а не то он должен сделать. Абослютно верно. То, что "должен сделать" оптимизатор, на практике работает медленнее, чем "попытка подогнать оптимизатор под, то что я хоту от него получить". Так почему при меньшем количестве Reads и CPU соединение с hash выполняется медленнее, чем loop? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:56 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
PrologДа, запускал друг за другом так, чтобы все данные были закешированы и исключить чтение с диска. daoи да вы уверены в своих хинтах?)) а то, то что у вас написано очень смахивает на попытку подогнать оптимизатор под, то что вы хотите от него получить, а не то он должен сделать. Абослютно верно. То, что "должен сделать" оптимизатор, на практике работает медленнее, чем "попытка подогнать оптимизатор под, то что я хоту от него получить". Так почему при меньшем количестве Reads и CPU соединение с hash выполняется медленнее, чем loop? знавал я одного товарисча - он нафигачит хинтов, а потом разбирайся почему банальнейший запрос вешает нехилый такой сервак )) "А чо? сейчас то работает быстро! а если станет медленно я другие хинты понаставлю" )) а теперь повангую - есть некий запрос ( несколько запросов такого типа) в большой процедуре , в котором в where есть условия типа ""(@var1 is null or fields1=@var1) and (@var2 is null or fields2=@var2) and ... и т.д." и вот вы хинтами пытаетесь данный запрос ускорить? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 11:06 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович Килобайтова теперь повангую - есть некий запрос ( несколько запросов такого типа) в большой процедуре , в котором в where есть условия типа ""(@var1 is null or fields1=@var1) and (@var2 is null or fields2=@var2) and ... и т.д." и вот вы хинтами пытаетесь данный запрос ускорить? )) Такого нет. Давайте не будем что-то предполагать, а обсуждать в рамках того запроса, который приведён в первом моем посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 11:21 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
PrologГигабайт Мегабайтович Килобайтова теперь повангую - есть некий запрос ( несколько запросов такого типа) в большой процедуре , в котором в where есть условия типа ""(@var1 is null or fields1=@var1) and (@var2 is null or fields2=@var2) and ... и т.д." и вот вы хинтами пытаетесь данный запрос ускорить? )) Такого нет. Давайте не будем что-то предполагать, а обсуждать в рамках того запроса, который приведён в первом моем посте. Дык, "для hash join характерно большее значение значение CPU по сравнению с loop, но меньшее значение Reads" - это сферическая истина в вакууме при размере таблиц, стремящемся к бесконечности. У вас мелкие таблички в памяти. Со всеми вытекающими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 11:45 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Prolog hash join выполняется медленнее и это при том, что кол-во чтений на порядки меньше чем при loop. И, как ни страано, использование CPU при hash три раза меньше, чем при loop. Почему в этом случае hash медленне чем loop? И почему CPU при hash меньше чем при loop? Потому что CPU работает не с диском, а с оперативной памятью и с кэшем L3. Посмотрите под отладчиком процесс MSSQL Server - и Вы увидите, как нерационально в данном конкретном случае идет работа с L3. Вот почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 11:49 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
я не зря спросил в начале - это больше теоретический вопрос или практический. Потому что с теоретической составляющей - такой вопрос можно повертеть. а с практической вопрос написан не правильно. Отсюда и сомнение в том вы понимаете все хинты которые стоят в данном запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:00 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
daoя не зря спросил в начале - это больше теоретический вопрос или практический. Потому что с теоретической составляющей - такой вопрос можно повертеть. а с практической вопрос написан не правильно. Отсюда и сомнение в том вы понимаете все хинты которые стоят в данном запросе. Напишите, как должен звучать правильно вопрос с практической стороны? Хорошо, согласен, что не понимаю хинты, которые стоят в запросе. Объясните в чём моя ошибка? Что я не так понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:35 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Prolog Что я не так понимаю? Самое главное: ХИНТЫ - АБСОЛЮТНОЕ ЗЛО. ЗЫ. Если вы можете не ставить хинты - не ставьте. Если вы НЕ можете не ставить хинты - не ставьте, все равно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:39 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
вам прям так надо вывести овер 50 к строк? чет очень сомневаюсь скорей всего есть ещё какие-то условия. но пускай запрос в лоб - обычный left join и без всяких option, ибо то что написано в option применительно для для данного запроса - чушь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:53 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
aleks222, Из области: "Жизнь - абсолютное зло: в её результате наступает смерть". Зачем-то хинты придумали, и с их помощью запросы работают быстрее. И это факт. Без хинтов и медленно - это абсолютное добро, с хинтами и быстро - это абсолютное зло. Может быть вы просто не умеете ими пользоваться? Вопрос не про хинты. Вопрос про соединения: "Почему при меньшем количестве Reads и CPU соединение с hash выполняется медленнее, чем loop"? Хинты для того, чтобы получить статистику при разных типах соединений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:58 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. авторinstruments i left loop join assettypes t 0_o Если ты хинтуешь луп джойн, будь добр слева указать маленькую таблицу, а справа большую. Ну и заодно FORCE ORDER для надежности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:01 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Prolog, счас придет местный адепт сбора статистики и ребилда индексов и расскажет тебе, где ты неправ и как ускорить твой запрос.... З.Ы. И тут я буду с ним согласен.... Ты уже статистику пересобрал? Индексы, адексатные твоим условиям отбора и соединения построил? Ничего не помогло? Пошел на крайние меры - использование хинтов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:03 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
daoвам прям так надо вывести овер 50 к строк ? чет очень сомневаюсь скорей всего есть ещё какие-то условия. но пускай запрос в лоб - обычный left join и без всяких option, ибо то что написано в option применительно для для данного запроса - чушь . Теперь я понял: это вы не поняли о чём мой вопрос и всё время пытаетесь ответить на какой-то другой. Тему закрываем. Считаю, что просто loop и hash ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:06 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Тему закрываем. Считаю, что просто loop и hash работают как-то не так, как я предполагаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:07 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Prolog, давай тогда зайдем с другого конца.... покажи первоисточники, на основании которых ты сделал выводы об алгоритмах работы NL и HJ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:14 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Провел эксперимент. Код: sql 1. в #USERS 4 записи в Tickets 250 тысяч users inner LOOP join 6 % от батча users inner HASH join 94% от батча HASH : Scan count 5, logical reads 6565 248 ms LOOP: Scan count 4, logical reads 609 5ms Чуда, к счастью, не произошло, всё работает как запланировано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:17 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
aleks222Prolog Что я не так понимаю? Самое главное: ХИНТЫ - АБСОЛЮТНОЕ ЗЛО. Абсолютное зло не думать над тем, что делаешь. Хинты полезный, нужный, удобный инструмент, если применять с головой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:19 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Cammomilealeks222пропущено... Самое главное: ХИНТЫ - АБСОЛЮТНОЕ ЗЛО. Абсолютное зло не думать над тем, что делаешь. Хинты полезный, нужный, удобный инструмент, если применять с головой. после лет 20 программирования - ты присоединишься к темной стороне ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:34 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович КилобайтовCammomileпропущено... Абсолютное зло не думать над тем, что делаешь. Хинты полезный, нужный, удобный инструмент, если применять с головой. после лет 20 программирования - ты присоединишься к темной стороне ))) После того, как какой-нибудь падаван сделает with index, а затем магистр Йода у индекса таблицы disable сделает. И выдаст сервер сообщение 315 , и не сделает ничего, руками в стороны разведя и вздохнув всеми CPU. И присоединится наш коллега к ситхам, и пошлет Дарта Вейдера с отборным легионом вырезать все хинты из кода... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:43 |
|
||
|
Сравнение loop join с hasj join
|
|||
|---|---|---|---|
|
#18+
Prologdaoвам прям так надо вывести овер 50 к строк ? чет очень сомневаюсь скорей всего есть ещё какие-то условия. но пускай запрос в лоб - обычный left join и без всяких option, ибо то что написано в option применительно для для данного запроса - чушь . Теперь я понял: это вы не поняли о чём мой вопрос и всё время пытаетесь ответить на какой-то другой. Тему закрываем. Считаю, что просто loop и hash я не пытаюсь ответить на другой вопрос - я пытаюсь понять зачем вы используете хинты . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:47 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39576744&tid=1690593]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 361ms |

| 0 / 0 |
