powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Два примера помогите
29 сообщений из 29, показаны все 2 страниц
Два примера помогите
    #40133091
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые коллеги, помогите понять. С виду пример простой. Но у меня есть некие сомнения. Два запроса. Один с применением 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;
...
Рейтинг: 0 / 0
Два примера помогите
    #40133134
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
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;


1) Для оформления кода используйте, пожалуйста, тэг SRC.

2) ISNULL - это в Transact SQL. В Oracle SQL есть аналогичная функция NVL, как вы и сообщили в описании.

3) Запросы разные. Второй запрос не отберет строки, у которых будет
Код: plaintext
A.SEOD_DECL_ID IS NULL
или
Код: plaintext
NUMDEKL_SEOD_BASE IS NULL,
поскольку в следующих выражениях результатом будет не TRUE, не FALSE, а UNKNOWN
( нечёткая трёхзначная логика с двумя чёткими и с одним нечётким значением):

Выражение подставим 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) "Второе! ..." Зависит от того, как поставлена задача, которую вы решаете.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133144
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Один с применением NVL


не вижу NVL в селекте

.....
stax
...
Рейтинг: 0 / 0
Два примера помогите
    #40133148
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, прошу прощения. Имеется ввиду NVL. Речь про Oracle ) так что представляем глазами что там nvl.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133153
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перефразирую
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
...
Рейтинг: 0 / 0
Два примера помогите
    #40133161
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Перефразирую
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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


Если это вопрос, то ответ на него = НЕТ .

Для оформления кода используйте, пожалуйста, тэг SRC.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133172
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз спрошу, может неправильно выразился.
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;

Вы считаете что результат запроса будет разный ?
...
Рейтинг: 0 / 0
Два примера помогите
    #40133189
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
SQL> set null null
SQL> l
  1  with t (SEOD_DECL_ID,NUMDEKL_SEOD_BASE) as (
  2   select 1,1 from dual union all
  3   select 1,2 from dual union all
  4   select null,1 from dual union all
  5   select null,null from dual)
  6  select * from t where
  7*   NVL(SEOD_DECL_ID, 0) != NVL(NUMDEKL_SEOD_BASE, 0)
SQL> /

SEOD_DECL_ID NUMDEKL_SEOD_BASE
------------ -----------------
           1                 2
null                         1

SQL> ed
Wrote file afiedt.buf

  1  with t (SEOD_DECL_ID,NUMDEKL_SEOD_BASE) as (
  2   select 1,1 from dual union all
  3   select 1,2 from dual union all
  4   select null,1 from dual union all
  5   select null,null from dual)
  6  select * from t where
  7*   SEOD_DECL_ID <> NUMDEKL_SEOD_BASE
SQL> /

SEOD_DECL_ID NUMDEKL_SEOD_BASE
------------ -----------------
           1                 2

SQL>



ps
я за селект без nvl

.....
stax
...
Рейтинг: 0 / 0
Два примера помогите
    #40133225
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
                   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;
 


Вы считаете что результат запроса будет разный ?

Ответ = ДА. Результат выполнения запроса будет разный.

Для оформления кода используйте, пожалуйста, тэг SRC.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133243
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
-- 1. операции с null всегда (ну почти) дают null, потому третий элемент тестового набора (null) в выборке отсутствует:
with t as (select column_value val from table(sys.odcinumberlist(0,1,null)))
select *
  from t t1, t t2
 where t1.val <> t2.val
order by 1,2
;

       VAL        VAL
---------- ----------
         0          1
         1          0

--2.Попытка разрешения вопроса через nvl(...,0) делает решение зависимым от данных, что ведет к сложно диагностируемым ошибкам.
--2.1 в данных отсутствует 0, который посредством nvl эквивалентен null-у (именно так думает разраб, написавший nvl):
with t as (select column_value val from table(sys.odcinumberlist(2,1,null)))
select *
  from t t1, t t2
 where nvl(t1.val,0) <> nvl(t2.val,0)
order by 1,2
;

       VAL        VAL
---------- ----------
         1          2
         1 
         2          1
         2 
                    1
                    2

6 rows selected

--2.2 В рабочих данных присутствует 0, что резко меняет результат:

with t as (select column_value val from table(sys.odcinumberlist(0,1,null)))
select *
  from t t1, t t2
 where nvl(t1.val,0) <> nvl(t2.val,0)
order by 1,2
;

       VAL        VAL
---------- ----------
         0          1
         1          0
         1 
                    1


-- 3. Для общего кругозора - есть специальное буквосочетание, ограниченно пригодное для решения задачи:
with t as (select column_value val from table(sys.odcinumberlist(0,1,null)))
select *
  from t t1, t t2
 where lnnvl(t1.val=t2.val)
order by 1,2
;

       VAL        VAL
---------- ----------
         0          1
         0 
         1          0
         1 
                    0
                    1

7 rows selected


SQL> 
...
Рейтинг: 0 / 0
Два примера помогите
    #40133372
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос.
На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это.
Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции
...
Рейтинг: 0 / 0
Два примера помогите
    #40133390
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
andrey_anonymous,

Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос.
На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это.
Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции

Полная каша в голове и пробелы в понимании темы. :-(

"Горшочек, больше не вари!" :-)
...
Рейтинг: 0 / 0
Два примера помогите
    #40133430
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Мне необходимо оптимизировать запрос

Оптимизация запроса - вещь забавная, но её не следует начинать с замены nvl, если этот nvl не ломает предпочтительный access path.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133438
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
andrey_anonymous,

Коллеги, дело в том, эти таблицы не маленькие. В них в каждой по 52 000 000 записей. Мне необходимо оптимизировать запрос.
На данный момент там стоит NVL. Я подумываю его убрать. Потому как преобразования Null в 0 пораждает дополнительное количество немалых байтов. У нас вообще вся база такая по 10-50 млн строк. И таблицы меньше 16Gb нет. Есть даже по 800 Gb. Но это не про это.
Вот и думаю зачем базе преобразовывать в 0 чтобы потом запросить эти строки подходящие под 0, когда как вылупились они от Null, в силу этого не лучше ль сразу попросить от базы строки содержащие Null. Тем самым сэкономлю на транзакции


и кто же вас пустил в этой базе что-либо оптимизировать?
...
Рейтинг: 0 / 0
Два примера помогите
    #40133578
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Мне необходимо оптимизировать запрос.

Для того что бы оптимизировать запрос надо сначала понять что именно надо оптимизировать. Так же не мешает убедиться что оптимизировать надо. Почему ты решил что запрос требует оптимизации?
...
Рейтинг: 0 / 0
Два примера помогите
    #40133607
Daniel Logovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flexgen

Для того что бы оптимизировать запрос . . .
Так же не мешает убедиться что оптимизировать . . .

Хинтую:
Это слитно, то есть одним словом пишется. :)
...
Рейтинг: 0 / 0
Два примера помогите
    #40133626
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgen

Для того что бы оптимизировать запрос . . .
Так же не мешает убедиться что оптимизировать . . .


Для того, чтобы оптимизировать запрос, надо сначала понять, что именно надо оптимизировать.

Настоящие граммар наци негодуэ...

И при "надо, что именно надо" включается стилистический наци.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133714
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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. Зарабатываю хорошо. Однако речь идет не только об этих строках кода, а еще и об внутреннем объёме байтов которые база перелопатит прежде, чем обработает эти строки кода. Естественно это не единственное над чем я думаю. Это так высосать из пальца. Но капля в море от большого скрипта мне не помешает. Если высосу уже будет легче. Так что если есть опровержения обоснуй. Ибо не трать своё личное время.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133716
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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);
 


эквивалентен
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 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 = 0 OR A.SEOD_DECL_ID IS NULL)
                               AND (NUMDEKL_SEOD_BASE != 0)
                               AND (A.SEOD_DECL_ID != NUMDEKL_SEOD_BASE OR (A.SEOD_DECL_ID IS NULL and NUMDEKL_SEOD_BASE != 0)
OR (NUMDEKL_SEOD_BASE IS NULL and A.SEOD_DECL_ID != 0));
 


Можно упрощать дальше, логику предикатов Вам в помощь.
Количество генерируемых в транзакции байт оценивайте самостоятельно.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133720
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня напишу скрипт и проверю сколь байт будет сгенерировано и отправлено на обработку ядру при разных подходах. Интересно
...
Рейтинг: 0 / 0
Два примера помогите
    #40133744
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Сегодня напишу скрипт и проверю сколь байт будет сгенерировано и отправлено на обработку ядру при разных подходах. Интересно


ужас какой
😱
...
Рейтинг: 0 / 0
Два примера помогите
    #40133746
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
juratorneo
Сегодня напишу скрипт и проверю сколь байт будет сгенерировано и отправлено на обработку ядру при разных подходах. Интересно


ужас какой
😱
тссс, не мешайте! Интересно же что там будет замерено.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133748
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это будет просто беда, если что-то окажется намеряно.
Человеку станет нельзя объяснить, в каком месте пора смеяться или плакать.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133861
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, как продвигается решение?
...
Рейтинг: 0 / 0
Два примера помогите
    #40133894
juratorneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx
Коллеги, как продвигается решение?

Пока никак.
Никто сказать не может в чем разница. Но надо решать. Кому то пригодиться. С виду запрос как запрос, только сколько байт попадет в курсор на обработку никто не может сказать. А чтобы это выяснить необходимо писать скрипт который покажет всё в байтах с преобразование is null в ноль и сколько это будет стоить по отношению если сразу отобрать is null
...
Рейтинг: 0 / 0
Два примера помогите
    #40133903
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo
Melkomyagkii_newbi
пропущено...


и кто же вас пустил в этой базе что-либо оптимизировать?


Я допускаю что вы любитель говорить не по делу. Кто допустил ?? Руководство. Уже как 1.5 лет. До этого я 2 года разрабатывал. Пишу процедуры. Использую курсоры, коллекции и тому подобное. Автоматизирую процессы. Разрабатываю на Oracle Apex. Зарабатываю хорошо. Однако речь идет не только об этих строках кода, а еще и об внутреннем объёме байтов которые база перелопатит прежде, чем обработает эти строки кода. Естественно это не единственное над чем я думаю. Это так высосать из пальца. Но капля в море от большого скрипта мне не помешает. Если высосу уже будет легче. Так что если есть опровержения обоснуй. Ибо не трать своё личное время.


Просто чтобы заниматься оптимизацией нужно хотя бы основы знать, которых вы очевидно не знаете. Жаль ваше руководство.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133925
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Я допускаю что вы любитель говорить не по делу. Кто допустил ?? Руководство. Уже как 1.5 лет. До этого я 2 года разрабатывал. Пишу процедуры. Использую курсоры, коллекции и тому подобное. Автоматизирую процессы. Разрабатываю на Oracle Apex. Зарабатываю хорошо. Однако речь идет не только об этих строках кода, а еще и об внутреннем объёме байтов которые база перелопатит прежде, чем обработает эти строки кода. Естественно это не единственное над чем я думаю. Это так высосать из пальца. Но капля в море от большого скрипта мне не помешает. Если высосу уже будет легче. Так что если есть опровержения обоснуй. Ибо не трать своё личное время.

Поищите где-нибудь Jonatan Lews "Cost-Based Oracle Fundamentals". Для начала.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133926
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И Optimizing Oracle Performance by Cary Millsap, Jeff Holt.
Книги хотя и старые, но очень полезные.
...
Рейтинг: 0 / 0
Два примера помогите
    #40133927
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
juratorneo

Пока никак.
Никто сказать не может в чем разница. Но надо решать.


22432511
Ето разные запросы

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with DEKL (SEOD_DECL_ID) as (
  2  select 0 from dual union all
  3  select 1 from dual union all
  4  select 2 from dual union all
  5  select null from dual)
  6  , DEKL_SVYAZ_N (NUMDEKL_SEOD_BASE) as (
  7  select 0 from dual union all
  8  select 1 from dual union all
  9  select 3 from dual union all
 10  select null from dual)
 11  select *
 12  from DEKL A,DEKL_SVYAZ_N B
 13  --
 14  WHERE NVL(A.SEOD_DECL_ID, 0) = 0
 15  AND NVL(NUMDEKL_SEOD_BASE, 0) != 0
 16  AND NVL(A.SEOD_DECL_ID, 0) != NVL(NUMDEKL_SEOD_BASE, 0)
 17  --
 18  /*
 19  WHERE A.SEOD_DECL_ID IS NULL
 20  AND NUMDEKL_SEOD_BASE IS NOT NULL
 21  AND A.SEOD_DECL_ID <> NUMDEKL_SEOD_BASE
 22* */
SQL> /

SEOD_DECL_ID NUMDEKL_SEOD_BASE
------------ -----------------
           0                 1
           0                 3
null                         1
null                         3

SQL> ed
Wrote file afiedt.buf

  1  with DEKL (SEOD_DECL_ID) as (
  2  select 0 from dual union all
  3  select 1 from dual union all
  4  select 2 from dual union all
  5  select null from dual)
  6  , DEKL_SVYAZ_N (NUMDEKL_SEOD_BASE) as (
  7  select 0 from dual union all
  8  select 1 from dual union all
  9  select 3 from dual union all
 10  select null from dual)
 11  select *
 12  from DEKL A,DEKL_SVYAZ_N B
 13  --
 14  /*
 15  WHERE NVL(A.SEOD_DECL_ID, 0) = 0
 16  AND NVL(NUMDEKL_SEOD_BASE, 0) != 0
 17  AND NVL(A.SEOD_DECL_ID, 0) != NVL(NUMDEKL_SEOD_BASE, 0)
 18  */
 19  --
 20  WHERE A.SEOD_DECL_ID IS NULL
 21  AND NUMDEKL_SEOD_BASE IS NOT NULL
 22* AND A.SEOD_DECL_ID <> NUMDEKL_SEOD_BASE
SQL> /

no rows selected

SQL>



сначала определитесь надо ли менять то что работает

если решите поменять (даж для себя, чтоб понять как оно работает)
надо селект изменить на "еквивалентный"

следуя/учитывая 22432607

потом сравните
1) время выполнения
2) план выполнения
3) статистику IO
4) еще что-то

зы
"сколько байт попадет в курсор на обработку" допускаю что считать не придется

.....
stax
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Два примера помогите
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]