|
Два примера помогите
|
|||
---|---|---|---|
#18+
Уважаемые коллеги, помогите понять. С виду пример простой. Но у меня есть некие сомнения. Два запроса. Один с применением NVL, другой без. В моё понимании они полностью одинаковы и главное не повлияет на результаты отбора ?? Это первое. Второе ! Разница лишь в том, чтобы преобразовать is null в 0 для последующего сравнения потребуется дополнительное количество байтов для вычисления. Если это так, то не лучше ли попросить базу дать сразу строки содержащие null и is not null, чем подставлять 0 и потом сравнивать ?? Сам пример: SELECT A.ID, B.NUMDEKL_SEOD_BASE AS SEOD_DECL_ID, A.ZIP, A.IDZAGRUZKA, A.ND_PRIZN, A.DATADOK, B.REG_DATE, A.PERIOD, A.OTCHETGOD, OPER_ID, IP_ADRES FROM DEKL A JOIN DEKL_SVYAZ_N B ON A.ID = B.D_BASE WHERE ISNULL(A.SEOD_DECL_ID, 0) = 0 AND ISNULL(NUMDEKL_SEOD_BASE, 0) != 0 AND ISNULL(A.SEOD_DECL_ID, 0) != ISNULL(NUMDEKL_SEOD_BASE, 0); ----------------------------------------------------------------------------------------- SELECT A.ID, B.NUMDEKL_SEOD_BASE AS SEOD_DECL_ID, A.ZIP, A.IDZAGRUZKA, A.ND_PRIZN, A.DATADOK, B.REG_DATE, A.PERIOD, A.OTCHETGOD, OPER_ID, IP_ADRES FROM DEKL A JOIN DEKL_SVYAZ_N ON A.ID = B.D_BASE WHERE A.SEOD_DECL_ID = 0 AND NUMDEKL_SEOD_BASE <> 0 AND A.SEOD_DECL_ID <> NUMDEKL_SEOD_BASE; ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 12:00 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Уважаемые коллеги, помогите понять. С виду пример простой. Но у меня есть некие сомнения. Два запроса. Один с применением NVL, другой без. В моё понимании они полностью одинаковы и главное не повлияет на результаты отбора ?? Это первое. Второе ! Разница лишь в том, чтобы преобразовать is null в 0 для последующего сравнения потребуется дополнительное количество байтов для вычисления. Если это так, то не лучше ли попросить базу дать сразу строки содержащие null и is not null, чем подставлять 0 и потом сравнивать ?? Сам пример: Код: 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.
1) Для оформления кода используйте, пожалуйста, тэг SRC. 2) ISNULL - это в Transact SQL. В Oracle SQL есть аналогичная функция NVL, как вы и сообщили в описании. 3) Запросы разные. Второй запрос не отберет строки, у которых будет Код: plaintext
Код: plaintext
( нечёткая трёхзначная логика с двумя чёткими и с одним нечётким значением): Выражение подставим NULL результатA.SEOD_DECL_ID = 0 NULL = 0 UNKNOWNNUMDEKL_SEOD_BASE != 0 NULL != 0 UNKNOWNA.SEOD_DECL_ID != NUMDEKL_SEOD_BASE NULL != NULL UNKNOWN 4) "Второе! ..." Зависит от того, как поставлена задача, которую вы решаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:42 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Один с применением NVL не вижу NVL в селекте ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:52 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Коллеги, прошу прощения. Имеется ввиду NVL. Речь про Oracle ) так что представляем глазами что там nvl. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:55 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Перефразирую SELECT A.ID, B.NUMDEKL_SEOD_BASE AS SEOD_DECL_ID, A.ZIP, A.IDZAGRUZKA, A.ND_PRIZN, A.DATADOK, B.REG_DATE, A.PERIOD, A.OTCHETGOD, OPER_ID, IP_ADRES FROM DEKL A JOIN DEKL_SVYAZ_N ON A.ID = B.D_BASE WHERE A.SEOD_DECL_ID is null AND NUMDEKL_SEOD_BASE is not null AND A.SEOD_DECL_ID <> NUMDEKL_SEOD_BASE; Равнозначен с использованием nvl ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:06 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Перефразирую Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Равнозначен с использованием nvl Если это вопрос, то ответ на него = НЕТ . Для оформления кода используйте, пожалуйста, тэг SRC. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:17 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Еще раз спрошу, может неправильно выразился. SELECT A.ID, B.NUMDEKL_SEOD_BASE AS SEOD_DECL_ID, A.ZIP, A.IDZAGRUZKA, A.ND_PRIZN, A.DATADOK, B.REG_DATE, A.PERIOD, A.OTCHETGOD, OPER_ID, IP_ADRES FROM DEKL A JOIN DEKL_SVYAZ_N B ON A.ID = B.D_BASE WHERE NVL(A.SEOD_DECL_ID, 0) = 0 AND NVL(NUMDEKL_SEOD_BASE, 0) != 0 AND NVL(A.SEOD_DECL_ID, 0) != NVL(NUMDEKL_SEOD_BASE, 0); ----------------------------------------------------------------------------------------- SELECT A.ID, B.NUMDEKL_SEOD_BASE AS SEOD_DECL_ID, A.ZIP, A.IDZAGRUZKA, A.ND_PRIZN, A.DATADOK, B.REG_DATE, A.PERIOD, A.OTCHETGOD, OPER_ID, IP_ADRES FROM DEKL A JOIN DEKL_SVYAZ_N B ON A.ID = B.D_BASE WHERE A.SEOD_DECL_ID IS NULL AND NUMDEKL_SEOD_BASE IS NOT NULL AND A.SEOD_DECL_ID <> NUMDEKL_SEOD_BASE; Вы считаете что результат запроса будет разный ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:35 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Вы считаете что результат запроса будет разный ? считаем что коды не могут принимать значение 0 Код: 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.
ps я за селект без nvl ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:57 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Еще раз спрошу, может неправильно выразился. Код: 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.
Вы считаете что результат запроса будет разный ? Ответ = ДА. Результат выполнения запроса будет разный. Для оформления кода используйте, пожалуйста, тэг SRC. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:45 |
|
Два примера помогите
|
|||
---|---|---|---|
#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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 16:11 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
andrey_anonymous, Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос. На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это. Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 08:14 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo andrey_anonymous, Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос. На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это. Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции Полная каша в голове и пробелы в понимании темы. :-( "Горшочек, больше не вари!" :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 10:31 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Мне необходимо оптимизировать запрос Оптимизация запроса - вещь забавная, но её не следует начинать с замены nvl, если этот nvl не ломает предпочтительный access path. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 11:45 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo andrey_anonymous, Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос. На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это. Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции и кто же вас пустил в этой базе что-либо оптимизировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 12:06 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Мне необходимо оптимизировать запрос. Для того что бы оптимизировать запрос надо сначала понять что именно надо оптимизировать. Так же не мешает убедиться что оптимизировать надо. Почему ты решил что запрос требует оптимизации? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 17:45 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
flexgen Для того что бы оптимизировать запрос . . . Так же не мешает убедиться что оптимизировать . . . Хинтую: Это слитно, то есть одним словом пишется. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 19:08 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
flexgen Для того что бы оптимизировать запрос . . . Так же не мешает убедиться что оптимизировать . . . Для того, чтобы оптимизировать запрос, надо сначала понять, что именно надо оптимизировать. Настоящие граммар наци негодуэ... И при "надо, что именно надо" включается стилистический наци. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2022, 20:31 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Melkomyagkii_newbi juratorneo andrey_anonymous, Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос. На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это. Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции и кто же вас пустил в этой базе что-либо оптимизировать? Я допускаю что вы любитель говорить не по делу. Кто допустил ?? Руководство. Уже как 1.5 лет. До этого я 2 года разрабатывал. Пишу процедуры. Использую курсоры, коллекции и тому подобное. Автоматизирую процессы. Разрабатываю на Oracle Apex. Зарабатываю хорошо. Однако речь идет не только об этих строках кода, а еще и об внутреннем объёме байтов которые база перелопатит прежде, чем обработает эти строки кода. Естественно это не единственное над чем я думаю. Это так высосать из пальца. Но капля в море от большого скрипта мне не помешает. Если высосу уже будет легче. Так что если есть опровержения обоснуй. Ибо не трать своё личное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 12:19 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
эквивалентен Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Можно упрощать дальше, логику предикатов Вам в помощь. Количество генерируемых в транзакции байт оценивайте самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 12:30 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Сегодня напишу скрипт и проверю сколь байт будет сгенерировано и отправлено на обработку ядру при разных подходах. Интересно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 12:54 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
juratorneo Сегодня напишу скрипт и проверю сколь байт будет сгенерировано и отправлено на обработку ядру при разных подходах. Интересно ужас какой 😱 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 15:03 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
booby juratorneo Сегодня напишу скрипт и проверю сколь байт будет сгенерировано и отправлено на обработку ядру при разных подходах. Интересно ужас какой 😱 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 15:14 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Это будет просто беда, если что-то окажется намеряно. Человеку станет нельзя объяснить, в каком месте пора смеяться или плакать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 15:26 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
Коллеги, как продвигается решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 22:28 |
|
Два примера помогите
|
|||
---|---|---|---|
#18+
andreymx Коллеги, как продвигается решение? Пока никак. Никто сказать не может в чем разница. Но надо решать. Кому то пригодиться. С виду запрос как запрос, только сколько байт попадет в курсор на обработку никто не может сказать. А чтобы это выяснить необходимо писать скрипт который покажет всё в байтах с преобразование is null в ноль и сколько это будет стоить по отношению если сразу отобрать is null ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 09:27 |
|
|
start [/forum/topic.php?fid=52&msg=40133172&tid=1879523]: |
0ms |
get settings: |
18ms |
get forum list: |
8ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
42ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
735ms |
get tp. blocked users: |
0ms |
others: | 2739ms |
total: | 3548ms |
0 / 0 |