Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Доброго дня, коллеги! Возможно что-то где-то не дочитал, вопрос к тем кто дочитал. Почему вот этот запрос: Код: sql 1. 2. 3. 4. Возвращает разные гуиды хотя по логике запрос в секции FROM должен выполняться 1 раз и должен вернуть 1 значение. Это происки оптимизатора? Никак нельзя получить одинаковый гуид без использования переменной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 15:44 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
а план посмотреть слабо ? там все написанно.. ведь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 15:51 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Drunik, Код: sql 1. но это вроде баг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 15:56 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Maxxа план посмотреть слабо ? там все написанно.. ведь написанно обычно в подъезде... вот план |--Compute Scalar(DEFINE:([Expr1000]=newid())) |--Constant Scan(VALUES1)),((2)))) Мне от этого плана легче не стало. Я понимаю что обращение происходит к функции 2 раза - я не понимаю почему? И можно ли что то сделать чтобы это обращение делалось 1 раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 15:57 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
TaPaKDrunik, Код: sql 1. но это вроде баг Спасибо, но это тоже не помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 15:59 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
DrunikTaPaKDrunik, Код: sql 1. но это вроде баг Спасибо, но это тоже не помогает. Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:01 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
или через джоин если хочется Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:08 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
TaPaK, Большое спасибо, так работает, но в голове не очень помещается. Что такое TOP (SELECT 1) - это какая-то недекларированная фича? План запроса отличается кардинально. Очень бы хотелось узнать о такой конструкции подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:09 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Я имею в виду различия плана вот с таким запросом: Код: sql 1. 2. 3. 4. А вот такой запрос всё равно не работает: Код: sql 1. 2. 3. 4. Есть ощущение что это какие-то игры оптимизатора и на какой-нибудь версии sql-сервера это всё перестанет работать (а возможно и сейчас не везде работает, проверял только на 2008 и 2014). Хотелось бы какую то теоретическую базу понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:14 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Drunik, я же написал "но это вроде баг" сейячас работает вплоть до 2016. Используйте переменную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:16 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
TaPaK, Я понял, спасибо, будем знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:19 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Drunik, Код: sql 1. 2. 3. DrunikЕсть ощущение что это какие-то игры оптимизатораАга, игры. Сравните планы вашего запроса и моего. И обратите внимание где и сколько раз вычисляется newid(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 16:26 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
First_value(newid()) over(order by (select null)) Если лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 17:30 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
invmDrunik, Код: sql 1. 2. 3. DrunikЕсть ощущение что это какие-то игры оптимизатораАга, игры. Сравните планы вашего запроса и моего. И обратите внимание где и сколько раз вычисляется newid(). Сломался ваш запрос на чуть более реальном примере: Код: sql 1. 2. 3. Вобщем Бог с ним с этим гуидом, не ломайте голову коллеги, я свои проблемы решил добавлением переменой - просто и надёжно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 19:07 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
DrunikСломался ваш запрос на чуть более реальном примереПеременная конечно надежнее. А если понадобится, например, запихнуть сей запрос в инлайновую функцию? Суть решения - обязательная зависимость в cross apply результата внутреннего запроса от внешнего. А в вашем чуть более реальном примере это не так. Более правильный вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 19:35 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
invmСуть решения - обязательная зависимость в cross apply результата внутреннего запроса от внешнего. А в вашем чуть более реальном примере это не так. Уважаемый invm, это всё отлично и про инлайновые функции и вьюхи вы абсолютно правы - в жизни всё требуется, но вы это где-то всё прочитали, в какой-то документации или это всё на уровне шаманства и танцев с бубнами? Интерес действительно не праздный, т.к. кроме гуидов часто встречаются запросы с обращением к какой-нибудь инлайн функции, которая вполне могла бы вызваться 1 раз, но вызывается как назло по кол-ву строк в запросе, например что то вроде такого: Код: sql 1. 2. В такого рода запросах (более сложных) оптимизатор вдруг может делать множество обращений к func1. Если вы могли бы дать какие-то общие рекомендации, правила как этого избежать, то это, думаю, было бы полезно для многих. Конечно очень желательно всё это подкрепить какими то ссылками на документацию или статьи. Не хотелось бы при необходимости перехода на новую версию sql-сервера рвать на всех местах волосы по причине необходимости переписывания половины объектов в БД из-за того, что такая конструкция перестанет работать. В любом случае спасибо за информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2018, 22:55 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Drunik, знать как работает sql-сервер, а именно читать справку, ходить на курсы )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 10:54 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович КилобайтовDrunik, знать как работает sql-сервер, а именно читать справку, ходить на курсы )) Уважаемый Гигабайт Мегабайтович, а зачем тогда нужен форум? Всё же можно прочитать в справке и походить на курсы? Я думал он нужен для обмена знаниями, видимо ошибался? Кто решает какие можно задавать вопросы на форуме, а какие нельзя? Вы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 11:05 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Drunik, простой ответ: не используйте скалярки в WHERE и тчк :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 11:11 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
DrunikГигабайт Мегабайтович КилобайтовDrunik, знать как работает sql-сервер, а именно читать справку, ходить на курсы )) Уважаемый Гигабайт Мегабайтович, а зачем тогда нужен форум? Всё же можно прочитать в справке и походить на курсы? Я думал он нужен для обмена знаниями, видимо ошибался? Кто решает какие можно задавать вопросы на форуме, а какие нельзя? Вы? ну если вы хотите на форуме про льва толстого что-бы вам процитировать всю "войну и мир " то что вы ожидаете в ответ услышать? а что можно и что нельзя - есть в правилах форума. И также в рекомендациях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 11:12 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович Килобайтов, плохо что нет рекомендации "не пуустозвонить" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 11:15 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
TaPaKГигабайт Мегабайтович Килобайтов, плохо что нет рекомендации "не пуустозвонить" Поддерживаю полностью. TaPaK, спасибо за рекомендации! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 11:21 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Drunik, если функция indeterministic, то сервер вынужден выполнить вызов ее для каждой строки. Т.е. функция при том же аргументе вернет другое значение. В том числе это системные функции даты-времени (rowguid также функция даты-времени). Если правильно помню, то в некоторых случаях скалярную функцию можно привязать к схеме и они станет deterministic и запрос вычислит ее один раз. Может это мои фантазии, надо проверять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 11:48 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
Гигабайт Мегабайтович КилобайтовDrunikпропущено... Уважаемый Гигабайт Мегабайтович, а зачем тогда нужен форум? Всё же можно прочитать в справке и походить на курсы? Я думал он нужен для обмена знаниями, видимо ошибался? Кто решает какие можно задавать вопросы на форуме, а какие нельзя? Вы? ну если вы хотите на форуме про льва толстого что-бы вам процитировать всю "войну и мир " то что вы ожидаете в ответ услышать? а что можно и что нельзя - есть в правилах форума. И также в рекомендациях. при всех недостатках ТС в данной теме - разве он просил "процитировать войну и мир" или всю документацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 12:09 |
|
||
|
Как получить одинаковый GUID
|
|||
|---|---|---|---|
|
#18+
DrunikИнтерес действительно не праздный, т.к. кроме гуидов часто встречаются запросы с обращением к какой-нибудь инлайн функции, которая вполне могла бы вызваться 1 раз, но вызывается как назло по кол-ву строк в запросеВы путаете инлайновую со скалярной. DrunikВ такого рода запросах (более сложных) оптимизатор вдруг может делать множество обращений к func1Это зависит от детерминированности функции, формы запроса и оптимизатора. Пример Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 12:12 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1690484]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 432ms |

| 0 / 0 |
