|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Кто знает и кому не трудно, подскажите в чем принципиальная разница между операциями HASH JOIN, MERGE JOIN, NESTED LOOPS в плане выпонения запроса. --------------------------------------------------- Ниже привожу описание для каждой операции взятое с оф. документации Oracle http://docs.oracle.com/cd/B19306_01/server.102/b14211/ex_plan.htm HASH JOIN (These are join operations.). Operation joining two sets of rows and returning the result. This join method is useful for joining large data sets of data (DSS, Batch). The join condition is an efficient way of accessing the second table. Query optimizer uses the smaller of the two tables/data sources to build a hash table on the join key in memory. Then it scans the larger table, probing the hash table to find the joined rows. MERGE JOIN (These are join operations.). Operation accepting two sets of rows, each sorted by a specific value, combining each row from one set with the matching rows from the other, and returning the result. NESTED LOOPS (These are join operations.). Operation accepting two sets of rows, an outer set and an inner set. Oracle compares each row of the outer set with each row of the inner set, returning rows that satisfy a condition. This join method is useful for joining small subsets of data (OLTP). The join condition is an efficient way of accessing the second table. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 19:19 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Я что то не догоняю. Теперь принято в вопросах на форуме сразу указывать и ответ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 19:23 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevТеперь принято в вопросах на форуме сразу указывать и ответ? По крайней мере это приятнее, чем когда забывают указывать вопрос... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 19:25 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevЯ что то не догоняю. Теперь принято в вопросах на форуме сразу указывать и ответ? Вопрос как раз и возник в связи с тем что читая официальную дукументацию трудно понять разницу ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 19:31 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shinkВопрос как раз и возник в связи с тем что читая официальную дукументацию трудно понять разницуПрочитаем эту документацию обычным мозгом и нашим новым alex-shink. Результат одинаковый! А если нет разницы, зачем платить больше читать документацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 19:41 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shink, Как правильно ты сам и заметил - разница у них принципиальная. А читать можно не только в официальной доке, но и у гугла спросить. Логика соединения и её реализация практически не зависит от вендора СУБД. Оно что в Оракле, что в скуль-сервере работают одинаково. Как вариант - одно из многочисленных обсуждений даже тут на скольюру ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 19:44 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Просьба к тем кто хорошо понимает разницу между всеми тремя примерами join операций - выложите пожалуйста простенькие примеры относящиеся к каждому типу ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 21:07 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shinkвыложите пожалуйста простенькие примеры относящиеся к каждому типу Примерчики чего? Они все делают одно и то же: выполняют операцию JOIN. Но разными способами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 21:27 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovalex_shinkвыложите пожалуйста простенькие примеры относящиеся к каждому типу Примерчики чего? Они все делают одно и то же: выполняют операцию JOIN. Но разными способами. Примеры запросов ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 21:28 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shinkПримеры запросов Код: sql 1.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 21:49 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shink, В общих словах разницы никакой, но на отдельных наборах данных ресурсоемкость алгоритма и время его выполнения могут сильно варьироваться. Nested loop - (сильно грубое описание) Пробегаем по таблице 1 и для каждой строки из нее смотрим какие строки из таблицы 2 ей подходят. Обычно очень быстро дает первые строки результата (если конечно таблица 2 не гигантская, а единственная строка из первой таблицы, которая попадет в результат - последняя). Еще алгоритм, практически не требует дополнительной памяти для промежуточной работы и индекс во второй таблице может сильно помочь. Hash join - Поскольку сравнивать каждую строку с каждой очень долго придумали шаманские танцы. Придумываем некую очень быстро вычислимую функцию от сравниваемых полей возвращающую результат от 1 до N. Просматриваем все строки таблицы 1 и раскладываем их в N корзин. Просматриваем таблицу 2 и для каждой строки проверяем только строки из подходящей корзины. Достоинства - Общее количество операций сравнения гораздо меньше. Недостатки - Можно оптимизировать только операции равенства, ибо для равных значений равны и значения hash функций, но ">" "<" уже не гарантируются. :( Если коллизии (совпадения hash при разных исходных данных) лягут так, что все строки попадут в одну корзину - то только лишняя работа. Merge join - построен на том, что если множества упорядочены, то просматривать их целиком не обязательно можно последовательно идти по одному - потом по другому, затем опять по первому и так пока не надоест. Недостатки - данные надо заранее упорядочить. А если использовать индекс при условии, что таблички не влезают в кеш и будут постоянно вымываться приведет к большому числу операций ввода-вывода. P.S. Забей на все это - СВО ошибется за тебя. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2014, 22:18 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shink, check this, about HJ http://asktom.oracle.com/pls/apex/z?p_url=ASKTOM.download_file?p_file=66776171704447018265&p_cat=hj.swf&p_company=822925097021874 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2014, 02:15 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
alex_shink, На пальцах SQL Joins, nested loops and all that in less than 6 minutes ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2014, 10:49 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
Сергей АрсеньевHash join - Поскольку сравнивать каждую строку с каждой очень долго придумали шаманские танцы. Придумываем некую очень быстро вычислимую функцию от сравниваемых полей возвращающую результат от 1 до N. Просматриваем все строки таблицы 1 и раскладываем их в N корзин. Просматриваем таблицу 2 и для каждой строки проверяем только строки из подходящей корзины. допустим есть маленькая таблица из 5 строк, которую нужно сджоинить с таблицей из 10 млрд строк. Нужно построить хэш таблицу, которая так же будет состоять из 5 строк. Затем нужно один раз пройтись по большой таблице, вычислить хэш для ключа, по которому происходит соединение, а затем найти полученный хэш в хэш-таблице. Не пойму в чем преимущество. Можно же сразу взять ключ и найти его в маленькой таблице. То есть получается тот же nested loop только не с исходной таблицей, а с полученной таблицей хэш значений ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 21:09 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
daunitoСергей АрсеньевHash join - Поскольку сравнивать каждую строку с каждой очень долго придумали шаманские танцы. Придумываем некую очень быстро вычислимую функцию от сравниваемых полей возвращающую результат от 1 до N. Просматриваем все строки таблицы 1 и раскладываем их в N корзин. Просматриваем таблицу 2 и для каждой строки проверяем только строки из подходящей корзины. допустим есть маленькая таблица из 5 строк, которую нужно сджоинить с таблицей из 10 млрд строк. Нужно построить хэш таблицу, которая так же будет состоять из 5 строк. Затем нужно один раз пройтись по большой таблице, вычислить хэш для ключа, по которому происходит соединение, а затем найти полученный хэш в хэш-таблице. Не пойму в чем преимущество. Можно же сразу взять ключ и найти его в маленькой таблице. То есть получается тот же nested loop только не с исходной таблицей, а с полученной таблицей хэш значений Рекомендую тебе задать этот вопрос где-нибудь на oracle.com... Как много полезных ответов ты видишь среди срача выше? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 22:43 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
http://oracle-performance-tuning-tips3-dass.blogspot.ru/ Вот тут неплохо разжеваны до мельчайших подробностей почти все вариации джоинов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 23:55 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
daunitoНе пойму в чем преимущество.Если бы один способ имел однозначное преимущество, про другие никто не вспоминал бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 23:57 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
daunitoНе пойму в чем преимущество. Можно же сразу взять ключ и найти его в маленькой таблице. DDL Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 00:34 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
daunito, проще говоря, в первом случае маленькая таблица была прочитана один раз, во втором - четыреста тысяч раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 00:37 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
кит северных морейво втором - четыреста тысяч раз500, конечно. и таблицы в первом запросе местами перепутал, хотя суть не меняется. поспешишь... :( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 01:45 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
кит северных морейпроще говоря, в первом случае маленькая таблица была прочитана один раз, во втором - четыреста тысяч раз. за счет чего? Вот получили мы хэш очередного ключа dropme$large, дальше нужно проверить есть ли уже его вхождение в хэш-таблицу. Каким образом это можно сделать не перебрав все значения в таблице? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 03:01 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
daunitoСергей АрсеньевHash join - Поскольку сравнивать каждую строку с каждой очень долго придумали шаманские танцы. Придумываем некую очень быстро вычислимую функцию от сравниваемых полей возвращающую результат от 1 до N. Просматриваем все строки таблицы 1 и раскладываем их в N корзин. Просматриваем таблицу 2 и для каждой строки проверяем только строки из подходящей корзины. допустим есть маленькая таблица из 5 строк, которую нужно сджоинить с таблицей из 10 млрд строк. Нужно построить хэш таблицу, которая так же будет состоять из 5 строк. Затем нужно один раз пройтись по большой таблице, вычислить хэш для ключа, по которому происходит соединение, а затем найти полученный хэш в хэш-таблице. Не пойму в чем преимущество. Можно же сразу взять ключ и найти его в маленькой таблице. То есть получается тот же nested loop только не с исходной таблицей, а с полученной таблицей хэш значений Joins – HJ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 05:08 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
daunitoкит северных морейпроще говоря, в первом случае маленькая таблица была прочитана один раз, во втором - четыреста тысяч раз.за счет чего? Вот получили мы хэш очередного ключа dropme$large, дальше нужно проверить есть ли уже его вхождение в хэш-таблицу. Каким образом это можно сделать не перебрав все значения в таблице?хеш на то и хеш, что его не надо "перебирать" - это адрес ячейки построенной за один проход хеш-таблицы, а в ячейке уже может быть перебор значений с одинаковым хешем. Приведенный пример демонстрирует разницу в количестве чтений. Но не совсем честный - с принуждением через leading к многократному чтению сильно неполного блока. На практике, у таблиц есть еще индексы на ключи, что помогает NL в ситуациях джоина на небольшую часть строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 09:07 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 11:25 |
|
План выполнения запроса. В чем разница между - HASH JOIN, MERGE JOIN, NESTED LOOPS?
|
|||
---|---|---|---|
#18+
-2-, Спасибо, вроде теперь понятно. Получается СУБД выделяет какой-то кусок памяти заранее и использует хэш как прямую адресацию в этом куске. Т.о. получив хэш, мы сразу знаем адрес нужного бакета ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 12:19 |
|
|
start [/forum/topic.php?fid=52&tid=1891128]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 443ms |
0 / 0 |