|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
таблица содержит вычисляемое поле [IsArterialShunt]. поле persisted и deterministic. для вычисления использутся скалярная фунция со schemabinding. часть селектов читают значение [IsArterialShunt] как и положено, из таблицы, без вызова функции. например: Код: sql 1.
а часть селектов вызывают функцию например: Код: sql 1. 2.
как заставить второй запрос работать нормально? он не должен вызывать фунцию. test: Код: 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.
@@version Microsoft SQL Server 2016 (SP2-CU15) Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) * это упрощенный пример. в реальности, используются очень тяжелые функции, вызов которых убивает производительность сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 11:46 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
А если так ? Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 11:49 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
msLex А если так ? Код: sql 1. 2.
а смысл? EquipmentId это идентификатор, не связан с вычисляемым полем; имеет тип int. в любом случае, не помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 11:54 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 12:00 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
valv msLex А если так ? Код: sql 1. 2.
а смысл? EquipmentId это идентификатор, не связан с вычисляемым полем; имеет тип int. в любом случае, не помогло. Опс, я подумал EquipmentId и есть вычисляемое поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 12:06 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
invm Код: 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.
можно ещё 100500 примеров привести, когда persisted столбец работает правильно и не пересчитывается. вопрос не в этом. вопрос: чем причина что он пересчитывается? и как заставить его работать всегда правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 12:15 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
valv чем причина что он пересчитывается? и как заставить его работать всегда правильно? Ок, подсказываю: Код: 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.
Любое изменение окружения, ведущее к возможности несовпадения результата вычисления функции с хранимым значением, будет давать такой эффект. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 12:24 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
invm valv чем причина что он пересчитывается? и как заставить его работать всегда правильно? Ок, подсказываю: Код: 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.
Любое изменение окружения, ведущее к возможности несовпадения результата вычисления функции с хранимым значением, будет давать такой эффект. теперь понял ваш посыл. уточню вопрос: в том случае, если окружение не меняется. как в моём примере, когда запросы идут один за другим, или в теле одной хранимой процедуры, без малейшего изменения окружения. возможно ли заставить persisted поле работать без пересчёта? если да, то как? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 12:56 |
|
почему вычисляемое поле , объявленное как persisted, пересчитывается при каждом селекте?
|
|||
---|---|---|---|
#18+
valv в том случае, если окружение не меняется. Вытаскиваете из кеша все планы правильных и неправильных запросов, либо собираете актуальные планы. Затем с помощью sys.dm_exec_plan_attributes или в самом плане смотрите set options с которыми он был скомпилирован. ЗЫ: Возможно есть другие причины такого поведения, но мне они не известны. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 13:23 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1685493]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 133ms |
0 / 0 |