|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
Код: sql 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.
я в нём пока не очень разобрался ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 22:13 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудух, Запросы разные, таблицы участвую разные. При чем тут вообще LATERAL? Тоже самое переписать на LEFT JOIN - будут сравнимые цифры и скорость. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 22:43 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
Maxim Boguk, а как тогда правильно задействовать тут LATERAL, сразу после FROM tbl_name его писать? LEFT JOIN во 2м запросе ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 23:32 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
в смысле разные таблицы, вот же: --,LATERAL (SELECT utm_placement_type FROM utms WHERE peid = le.peid) LEFT JOIN utms ON utms.peid = le.id AND utms.pent = 2 -- 3я ступень ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 23:33 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудух, а куда вы AND utms.pent = 2 из lateral потеряли то? И главное зачем вам в данном случае вообще lateral нужен то???? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 23:42 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
да, потерялся pent, ну с ним стало 60ms... всё-равно далеко а нужен, чтобы его понять )) я пытаюсь разобраться, как именно он работает можете показать правильный пример из этого варианта? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 23:55 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудух, работает планировщик а не лейтерал. лейтералом вы ограничиваете (если умеете) свободу планирования и вы сравниваете несравниваемое. вам тогда иннер джойн нужно сравнивать или писать "лефт джойн лейтерал (....) он труе" , например и никакого секрета нет. работает как кореллированный запрос т.е. нестед лупом, если оптимизатор не решит захешджойниться. с дополнительным фильтром по типу иннера. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 13:32 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
qwwqи вы сравниваете несравниваемое. вам тогда иннер джойн нужно сравнивать или писать "лефт джойн лейтерал (....) он труе" , например так вот этот момент мне и непонятен почему именно INNER или LEFT JOIN LATERAL ... ON true? я мог бы написать FROM foo, LATERAL (и тут же юзать данные из foo) но я не могу после LEFT JOIN так написать и юзать данные из LEFT JOIN ? а ведь эти данные встают в селекте рядом с данными из foo ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 16:12 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудух, не понял, чо неясно. у рукожопов из оракла был неявный лейтерал в конструкции "тейбл". обычно с пайплайн--ф-ями пользовался. позднее кто-то сообразил, что лейтерал это особый отдельный случай. и обставил его отдельной конструкцией языка. ясной и однозначной. запятая перед лейтералом, если стоит, переводится как "кросс джойн" когда вам кросс не нужен -- делаете его лефтом он труе всё предельно ясно и понятно а не куча ора-кала где куда не плюнь -- везде рыбу заворачивали. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 16:56 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
а, запятая = CROSS JOIN Код: sql 1. 2. 3. 4. 5. 6.
т.е. у меня вместо запятой будет CROSS JOIN LATERAL но вообще я пытался изобразить что-то такое: Код: sql 1. 2. 3. 4.
ну и он таки работает и результаты вроде даже те же самые только медленно... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 19:24 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудухпочему именно INNER или LEFT JOIN LATERAL ... ON true? я мог бы написать FROM foo, LATERAL (и тут же юзать данные из foo) но я не могу после LEFT JOIN так написать и юзать данные из LEFT JOIN ? Таки посмотрите синтаксис SQL в части FROM выражения: https://www.postgresql.org/docs/current/static/queries-table-expressions.html#QUERIES-FROM ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 19:50 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудухну и он таки работает и результаты вроде даже те же самые только медленно... ещё раз по буквам, запрос с лейтералом НЕ эквивалентен (для ёптимайзира) запросу с лефт джойном. лейтерал надо сравнивать по скорости с ИННЕР ,б, джойном.(одни и те же затраты на фильтрацию пересечения) а запрос с лефт джойном надо сравнивать с запросом с тем же лефт джойном перед лейтералом. если все буквы выписать верно -- они будут формально эквивалентны. и потом уже строить умозаключения о медленностях и быстринах. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 20:01 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
ок, вроде прояснилось, всем спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 20:18 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
qwwq… работает как кореллированный запрос т.е. нестед лупом, если оптимизатор не решит захешджойниться. с дополнительным фильтром по типу иннера. LATERAL только вложенными циклами работает. Можно как хинт пользовать… ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 22:06 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
полудухок, вроде прояснилось, всем спасибо в общем вот такой LATERAL сделал, как надо было: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 23:31 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
мне нужно было, чтобы эти 3 колонки были доступны в основном запросе через подзапрос, где можно было бы LIMIT 1 сделать, потому что иначе дубли шли с LEFT JOIN dog_bank правильно сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 23:36 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
ну кроме того, что ордер не на ту колонку сделал )) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 23:38 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
vyegorovqwwq… работает как кореллированный запрос т.е. нестед лупом, если оптимизатор не решит захешджойниться. с дополнительным фильтром по типу иннера. LATERAL только вложенными циклами работает. Можно как хинт пользовать… тоже когда-то так же думал но без лимита , хотя бы лимит 1000000000 -- не гарантированно, помнится но спорить не буду -- давно не практиковал если захотите прочекать -- берите таблички которые уверенно хешджойнятся при иннере. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 10:52 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
qwwq, LATERAL реализуется через параметризованные пути (paths). И вот что про них пишут в исходниках: Код: plaintext 1. 2. 3. 4.
Любой LATERAL подзапрос параметризуется по отношению к предыдущим таблицам на которые он ссылается, и таким образом он может быть только внутри NL-а. Можно почитать README, в этом месте в частности: https://github.com/postgres/postgres/blob/master/src/backend/optimizer/README#L769 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 13:32 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
vyegorov, Код: sql 1. 2. 3. 4. 5.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
вероятно я что-то не так понимаю в этом вот случае ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 14:07 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
qwwq, Этот запрос трансформируется в более простой: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 14:15 |
|
от чего LATERAL в 40 раз медленнее, чем LEFT JOIN ?
|
|||
---|---|---|---|
#18+
vyegorovqwwq, Этот запрос трансформируется в более простой: Код: sql 1.
об том и речь. и только "лимит миллиард" эту возможность трансформации снимает. т.е. "лейтерал работает как хинт" -- неверное утверждение. об чом и речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 14:27 |
|
|
start [/forum/topic.php?fid=53&msg=39688084&tid=1995625]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 272ms |
total: | 392ms |
0 / 0 |