|
|
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
Есть строковое поле вида tra-la-la / bla-bla-bla, обеих частей может и не быть (меня не бейте, я бы тоже в двух полях хранил). Выполняем запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. Сколько раз для каждой строки Oracle будет вычислять INSTR (fld, '/')? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 01:30 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
IAmAllanСколько раз для каждой строки Oracle будет вычислять INSTR (fld, '/')?-ннадцать. А ты не там ищешь поле для оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 08:42 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
ElicIAmAllanСколько раз для каждой строки Oracle будет вычислять INSTR (fld, '/')?-ннадцать. А ты не там ищешь поле для оптимизации. Про надцать догадываюсь. Просто интересно же, нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 19:43 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
IAmAllanПро надцать догадываюсь. А вот я нет. Вопрос-то с подковыркой. Если бы ты спросил солько раз выпoлняется INSTR (fld, '/') в: Код: plsql 1. то ответ бы был - один раз на строку. Грубо говоря, парсер бы заменил все INSTR (fld, '/') ссылками на одну и ту же временную переменную а вычисление INSTR (fld, '/') и присвоение результата этой временной переменной поставил до ссылок. Но в твоем примере INSTR (fld, '/') используется в CASE, а CASE использует short circuit evaluation и посему выражение WHEN будет вычисляться только если предыдущее не дало TRUE и Oracle просто не может поставить вычисление INSTR (fld, '/') и присвоение результата этой временной переменной до ссылок. Есть ли у Oracle механизм проверки "а был ли мальчик" в CASE - не знаю и не думаю это можно проверить. Хотя есть нюанс - первая кляуза WHEN вычисляется всегда. Вопрос в том достаточо ли умен парсер чтобы этим воспользоваться? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 20:32 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
SYГрубо говоря, парсер бы заменил все INSTR (fld, '/') ссылками на одну и ту же временную переменнуюнет, не заменил бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 21:15 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
xtenderнет, не заменил бы Это почему-же? Все это вроде еще у Кнута описано. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 21:22 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
SY, Одно значение может быть получено разными выражениями. Не проще ли всегда вызывать обертку, которая проверяет (результ_) кеш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 22:30 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
-2-SY, Одно значение может быть получено разными выражениями. Не проще ли всегда вызывать обертку, которая проверяет (результ_) кеш. Я не обсуждаю "оптимальность" приведeнного SQL (на что намекнул Elic) а просто отвечаю (рассуждаю) на вопрос оптимизации SQL'ом вычисления повторяющихся выражений (не включающие в себя UDF). SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2018, 22:54 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
Господа, друзья, коллеги! Мне же действительно интересно было, как там оно в этом случае с оптимизацией.И всё. Но узнал много интересного из обсуждения, спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2018, 00:17 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
SYxtenderнет, не заменил бы Это почему-же? Все это вроде еще у Кнута описано. SY.я уже где-то это показывал детально, но лень искать... лучше стандартное напомню: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2018, 01:43 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
xtenderя уже где-то это показывал детально, но лень искать... лучше стандартное напомню: Два, на мой взгляд, разных механизма. Во-первых, deterministic появился в Oracle совсем не из-за оптимизации числа выполнений а для пoддержки FBI по UDF. Оптимизация числа выполнений появилась кажется в 10G. Во-вторых оптимизации числа выполнений не связана напрямую с числом обращений к UDF. Но вернемся к UDF. UDF, как и любой PL/SQL нетранзакционна и мы по-определению должны вызывать UDF при каждой на неё ссылке. Посему до того как появилась оптимизации числа выполнений deterministic UDF парсер просто не мог применять механизм "вычисляем выражение один раз на строку" к UDF. И я очень сомнeваюсь, да и твой пример тому подтверждение, Oracle бросился переписывать SQL парсер с решением оптимизации числa вызовов deterministic UDF. Просто создали кеш значения в который добавляются неясно как и когда (internal implementation) и этот механизм кеширования не гарантирует что UDF не будет вызвана при повторном выполнении - просто число выполнений deterministic UDF может уменьшиться. Так-что, IMHO, два разных механизма. Да и вообще все это академический интерес... SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2018, 03:51 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
xtenderSYпропущено... Это почему-же? Все это вроде еще у Кнута описано. SY.я уже где-то это показывал детально, но лень искать... лучше стандартное напомню: Код: 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. Код: 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. И опять же -- INSTR встроенная SQL функция, можно сказать, часть языка. Простор для оптимизации на этапе парсинга огромный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2018, 06:14 |
|
||
|
Насколько Oracle умён в плане оптимизации вычислений?
|
|||
|---|---|---|---|
|
#18+
SYДа и вообще все это академический интерес...Oracle-таки не стоит на месте. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Может поэтому: Код: plsql 1. 2. Пока не гуглится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2018, 10:47 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39731163&tid=1883183]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 396ms |

| 0 / 0 |
