Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
В процедуре несколько if, но без else. Идут подряд. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Как в этом случае ведет себя компилятор: а) если указывать в каждом блоке return б) если не указывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 17:58 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
_Промешан_, скомпилирует как все посмотреть вам было быстрее чем писать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 18:05 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
_Промешан_, авторКак в этом случае ведет себя компилятор Срывается в Геленджик на попутках. Взаимоисключащие IFы без ELSE - выстрел и себе в ногу и в мозг компилятора. Потом сиди, разбирай, могут ли эти блоки вызываться после предыдущих. Если где-то что-то указывать, то скомпилируется с указанием указанного. Если не указывать что-то - оно не попадет в скомпилированный результат, потому как не существует. В поисках мистической оптимизации можно подумать на предмет, под какой же @flag компилятор сделает план. Во время компиляции переменная какое значение имеет? А во время выполнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 18:37 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
если указывать в каждом, не ясно что за бред вы пишете, но в кеше планов будет даже кусок Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 18:39 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
TaPaKесли указывать в каждом, не ясно что за бред вы пишете, но в кеше планов будет даже кусок Код: sql 1. 2. 3. 4. 5. Я вот тоже не понял, к кому обращен этот поток сознания. Не понял что написано - с чем споришь, а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 18:41 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
Компилятор просто скомпилирует как есть. А вот план будет построен для того флага, с которым будет первый вызов процедуры. Собственно при компиляции будет неявный выход после попадания в любой удовлетворяющий if или цикл проверки закончится последним if? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 00:14 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
Проще говоря, строит ли компилятор дерево вызовов опираясь на управляющие if и делает ли лишние итерации проверки или нет. По сути в этом вопрос. Не совсем это про план выполнения. Хотя касается его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 00:17 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
Что я имею в виду - компилятор мог бы выстроить как именно проходить по блокам и что делать после. Вот было бы после всех if чтонибудь вроде return. И в этом случае в дереве вызовов (инструкциях) могло бы быть следующее: вот в этот блок заходим, потом столько то блоков (if) пропускаем и вызываем вот этот, где return стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 00:19 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
_Промешан_ , У вас праздный вопрос, или есть проблемы какие-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 01:02 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
_Промешан_Что я имею в виду - компилятор мог бы выстроить как именно проходить по блокам и что делать после. Вот было бы после всех if чтонибудь вроде return. И в этом случае в дереве вызовов (инструкциях) могло бы быть следующее: вот в этот блок заходим, потом столько то блоков (if) пропускаем и вызываем вот этот, где return стоит. это будет актуальный план ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2018, 10:43 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич_Промешан_ , У вас праздный вопрос, или есть проблемы какие-то? Ну как праздный. Не совсем. Нужно для себя понять в каких случаях и главное ПОЧЕМУ стоит или не стоит писать return. Почему например нельзя в каждом блоке if писать return? if a=1 begin ... return 0; end if a=2 begin ... return 0; end if a=3 begin ... return 0; end if a=4 begin ... return 0; end Например так. Мы то обычно не пишем. Но тут возник некий вопрос а что случится нехорошего если писать ретурн всегда. (а - не меняется внутри if). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 17:49 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
_Промешан_, Увеличите затраты на сопровождение такого кода. Особенно если по требованиям очередного тимлида начнете заворачивать в транзакции. А что компилятору - он железный, справится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 18:33 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов_Промешан_, Увеличите затраты на сопровождение такого кода. Особенно если по требованиям очередного тимлида начнете заворачивать в транзакции. А что компилятору - он железный, справится. +1 проще поддерживать, когда у хранимки одна точка выхода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 18:41 |
|
||
|
Как sql компилирует и хранит план, если много if и как влияет return
|
|||
|---|---|---|---|
|
#18+
_Промешан_if a=1 begin ... return 0; end if a=2 begin ... return 0; end if a=3 begin ... return 0; end if a=4 begin ... return 0; endОбычно такие портянки гораздо проще и правильнее писать вот так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2018, 20:01 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39608781&tid=1690121]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
99ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 445ms |

| 0 / 0 |
