|
|
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Упрощенный пример, в реальность кейсы больше по количеству условий и полей в районе сотни. В результате с кейсами получается огромная простыня. Код: 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. В первом варианте кейс по f1 выполняется для каждого поля строки (возможно, оракл понимает и оптимизирует это, но сильно не уверен). В итоге, т.к. в реальности кейсы сложнее, если писать одно и то же условие для каждого поля, получается каша (по читаемости). Во втором варианте мы выносим условие по f1 из кейсов, но тогда разрастается сам запрос ну и два прохода. Рассматривал еще через xml, но тут быстродействие вообще падает, да и потом доставать еще из xml придется. Вдруг есть еще варианты залезть на елку, чтобы и запрос был читаемый без дублирования кейсов и оптимально работал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 09:38 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
В данном примере (если ты юзаешь действительно case, а не какую-то свою самонаписанную функцию) case является частью языка SQL и никаких значимых тормозов в общее время не вносит (можно конечно поспорить, что в машинных кодах это выглядит по-разному) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 09:45 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, конечно на нынешних скоростях разницы между обоими вариантами нет, хотя первый вариант будет более затратрым имхо если оракл вдруг внутрях сам не оптимизирует и не вынесет кейс по f1 на уровень всей строки. То вопрос наверно больше в том, можно ли вынести f1 на уровень строки, не разбивая его на части по примеру второго варианта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 09:54 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Разница между обоими вариантами есть и весьма существенная (те самые 2 прохода) Не надо бояться использовать SQL-конструкции (выражения, а даже не функции) в SQL-запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 11:09 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Ну по мелочи (хотя может и не по мелочи, зависит от данных) напрашивается для той самой производительности в 1ом варианте не бояться расширять where. Если брать ваш пример, то Код: plsql 1. 2. 3. Вот тут реально можно помочь Ораклу - особенно, если запросом учитывается только малая часть данных, как в приведенном вами pivot. PS: Ну и можно чуток сэкономить и на тексте :) Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2017, 12:32 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
JaRo, а не проще себе сразу по колокольчикам ударить? в первом примере посмотри план. на что твой or может иногда разложиться. и иногда... это будет не самая лучшая производительность. тем более изначальных условий where автор не привел, но они на 99% есть в реальном примере. во втором примере если везде будет null то и сумма будет null что закономерно может привести к неправильной интерпритации на клиенте. когда действительно надо будет увидеть 0. думай прежде чем такие советы давать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 10:34 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Vint, JARO девушка и весьма толковая, не надо ее обижать. Ну посмешила чуток, бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 12:21 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
У меня на сервере вью с где-то близким синтаксисом компилируется часов 5-6 (так и на 11.2 было, и на 12.1). Работает нормально, пользователи не жалуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 12:22 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Vint, выплеснул - полегчало? Может быть по-разному, если и развернёт, то возможно так и оптимальнее будет. Всё зависит от конкретностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 12:23 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopпос п ешилаFixed. Rouga, Касательно кейсов, можно влиять на скорость меняя порядок. Особеннно если одни предикаты "легче" других. В первом случае power вычисляется для id < 4, во втором случае - всегда. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 12:39 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopКасательно кейсов, можно влиять на скорость меняя порядок. Особеннно если одни предикаты "легче" других. В первом случае power вычисляется для id < 4, во втором случае - всегда.Совпадение. Short-circuit evaluation гарантировано только для веток case-а. Внитри compound condition - нигде не гарантирован порядок вычисления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 12:59 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, да и не думал, но толковости в глупых советах не увидел. JaRo, прежде чем следующий раз давать советы опиши ограничения. а так оба совета бесполезны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 13:07 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Elicdbms_photoshopКасательно кейсов, можно влиять на скорость меняя порядок. Особеннно если одни предикаты "легче" других. В первом случае power вычисляется для id < 4, во втором случае - всегда.Совпадение. Short-circuit evaluation гарантировано только для веток case-а. Внитри compound condition - нигде не гарантирован порядок вычисления.Да, это обсуждалось здесь неоднократно. Но есть то, что есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 13:19 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopНо есть то, что есть.Это крайне отвратительный принцип: "Что вижу - то пою" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 13:36 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
…тем более, что есть способ гарантировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 13:37 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Elicdbms_photoshopНо есть то, что есть.Это крайне отвратительный принцип: "Что вижу - то пою"Ознакомление с твоей системой ценностей очень ценно для меня, спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 13:42 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
JaRoНу по мелочи (хотя может и не по мелочи, зависит от данных) напрашивается для той самой производительности в 1ом варианте не бояться расширять where. Если брать ваш пример, то Код: plsql 1. 2. 3. Отфильтровать, выкинуть все, что не нужно - этой действительно то, с чего нужно начать в данном случае. Ведь по сути это общее правило написания SQL-запросов. А если оптимизатор решит сделать concatenation и это будет казаться неоптимальным, то можно прибить гвоздями хинтами. Правда, если будет table fullscan, с учетом того, что следующий за фильтрацией шаг - sort aggregate, выигрыш от where-фильтрации может быть незначительным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 13:42 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopОзнакомление с твоей системой ценностей очень ценно для меня, спасибо. :)Т.е. ты не только используешь, но и проповедуешь шаткий говнокод? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 14:01 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
ElicТ.е. ты не только используешь, но и проповедуешь шаткий говнокод?По-моему ты несколько передергиваешь, называя это говнокодом. Если смотреть с точки зрения, что порядок вычисления условий не определен, то без разницы, какое условие впаять первым, а какое вторым. Ну а если оптимизатор посчитает их в порядке следования, то фотошоп получит выигрыш, пусть даже и незначительный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 14:15 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
AmKadПо-моему ты несколько передергиваешь, называя это говнокодом.Возможно. С точки зрения намеренной перестановки предикатов только ради надежды на большую вероятность слева-направо - это не говнокод, а бессмысленная экономия на эфемерных спичках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 14:33 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Elic, Иногда я даю просто другим пищу для размышления. Вот так же как тут Есть ли хинты оптимизации указывающие порядок применения условий во фразе where? После озвучивания подобного, вопрошающий может прийти к определенным выводам, а может не прийти. Твои желчные комментарии выглядят несколько нелепо так же как и making conclusions based on assumptions. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 14:48 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
Rouga, можно еще через pivot попробовать Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 16:32 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
MaximaXXLRouga, можно еще через pivot попробовать Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. А куда дeлись остальные строки? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 16:44 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
SYMaximaXXLRouga, можно еще через pivot попробовать Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. А куда дeлись остальные строки? SY. по желанию заказчика (Rouga) их должно быть 6. ну и пропустил "," в структуре Код: plsql 1. т.о. корректный вариант Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 16:49 |
|
||
|
Переписать запрос
|
|||
|---|---|---|---|
|
#18+
RougaВдруг есть еще варианты залезть на елку, чтобы и запрос был читаемый без дублирования кейсов и оптимально работал? Можно через функцию, если данных не много : Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 17:27 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39435811&tid=1886108]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 471ms |

| 0 / 0 |
