Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

один и тот же запрос
c хинтом указывающим конкретный индекс - нет записей
без хинта есть одна
правильно должна быть одна
индексу делался ребилд онлайн - не помогло
проблема возникла после перехода с 10.1..5
может патчи какие надо накатить?
зы так же при переходе возникла проьблема
https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=480508&hl=
30 окт 07, 11:20    [4854523]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
дрымс
Guest
Dimka08
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

один и тот же запрос
c хинтом указывающим конкретный индекс - нет записей
без хинта есть одна
правильно должна быть одна
индексу делался ребилд онлайн - не помогло
проблема возникла после перехода с 10.1..5
может патчи какие надо накатить?
зы так же при переходе возникла проьблема
https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=480508&hl=


гадание на кофейной гуще. запросы, планы, структуру таблиц в студию
30 окт 07, 11:33    [4854610]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
StMikle
Member

Откуда:
Сообщений: 132
а 10ка понимает хинты?????????????- онаже умная- ей наши подсказки ненужны, а если их встречает то клинит ее от злости...
30 окт 07, 11:39    [4854650]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
без явного указания индекса (ACCOUNTS_ACCNUM) -работает

SELECT STATEMENT, GOAL = ALL_ROWS			492	8	752
 FILTER					
  HASH GROUP BY			295	1	66
   FILTER					
    TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	3	17	697
     NESTED LOOPS			283	1569	103554
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	92	2300
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	2	1	
    SORT AGGREGATE				1	26
     TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	11	92	2392
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	17	
 FILTER					
  HASH GROUP BY			295	1	66
   FILTER					
    TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	3	17	697
     NESTED LOOPS			283	1569	103554
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	92	2300
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	2	1	
    SORT AGGREGATE				1	26
     TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	11	92	2392
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	17	
 SORT AGGREGATE				1	37
  FILTER					
   TABLE ACCESS FULL	ODB_STAT	TMP_1PB	145	1	37
 SORT AGGREGATE				1	36
  FILTER					
   TABLE ACCESS FULL	ODB_STAT	TMP_1PB	145	1	36
 SORT ORDER BY			492	8	752
  NESTED LOOPS OUTER			491	8	752
   HASH JOIN			475	8	496
    HASH JOIN			472	8	432
     VIEW	SYS	VW_NSO_3	190	5	95
      HASH UNIQUE			190	5	225
       FILTER					
        FILTER					
         TABLE ACCESS FULL	ODB_STAT	TMP_1PB	145	5	225
        HASH JOIN			17	1	117
         TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCOUNTS	1	1	30
          NESTED LOOPS			14	1	81
           NESTED LOOPS			13	2	102
            TABLE ACCESS BY INDEX ROWID	ODB_STAT	ONEPB_DBFSALDO	11	2	86
             INDEX RANGE SCAN	ODB_STAT	IDX_MESGODNAME	2	80	
            TABLE ACCESS BY INDEX ROWID	ODB_STAT	KL_R030	1	1	8
             INDEX RANGE SCAN	ODB_STAT	IND_A3	0	1	
           INDEX RANGE SCAN	ODB_STAT	ACCOUNTS_MFO_R020_R030	0	1	
         TABLE ACCESS FULL	ODB_STAT	ONEPB_BANKS	2	81	2916
     TABLE ACCESS FULL	ODB_STAT	ACCOUNTS	280	158298	5540430
    TABLE ACCESS FULL	ODB_STAT	KL_R030	2	209	1672
   VIEW	SYS		2	1	32
    FILTER					
     TABLE ACCESS FULL	ODB_STAT	ONEPB_BANKS	2	1	36


с явным указанием индекса (ACCOUNTS_ACCNUM) - не работает

SELECT STATEMENT, GOAL = ALL_ROWS			3283	8	752
 FILTER					
  HASH GROUP BY			295	1	66
   FILTER					
    TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	3	17	697
     NESTED LOOPS			283	1569	103554
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	92	2300
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	2	1	
    SORT AGGREGATE				1	26
     TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	11	92	2392
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	17	
 FILTER					
  HASH GROUP BY			295	1	66
   FILTER					
    TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	3	17	697
     NESTED LOOPS			283	1569	103554
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	92	2300
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	2	1	
    SORT AGGREGATE				1	26
     TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	11	92	2392
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	17	
 SORT AGGREGATE				1	37
  FILTER					
   TABLE ACCESS FULL	ODB_STAT	TMP_1PB	145	1	37
 SORT AGGREGATE				1	36
  FILTER					
   TABLE ACCESS FULL	ODB_STAT	TMP_1PB	145	1	36
 SORT ORDER BY			3283	8	752
  NESTED LOOPS OUTER			3282	8	752
   HASH JOIN			3266	8	496
    TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCOUNTS	615	2	70
     NESTED LOOPS			3264	8	432
      VIEW	SYS	VW_NSO_3	190	5	95
       HASH UNIQUE			190	5	225
        FILTER					
         FILTER					
          TABLE ACCESS FULL	ODB_STAT	TMP_1PB	145	5	225
         HASH JOIN			17	1	117
          TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCOUNTS	1	1	30
           NESTED LOOPS			14	1	81
            NESTED LOOPS			13	2	102
             TABLE ACCESS BY INDEX ROWID	ODB_STAT	ONEPB_DBFSALDO	11	2	86
              INDEX RANGE SCAN	ODB_STAT	IDX_MESGODNAME	2	80	
             TABLE ACCESS BY INDEX ROWID	ODB_STAT	KL_R030	1	1	8
              INDEX RANGE SCAN	ODB_STAT	IND_A3	0	1	
            INDEX RANGE SCAN	ODB_STAT	ACCOUNTS_MFO_R020_R030	0	1	
          TABLE ACCESS FULL	ODB_STAT	ONEPB_BANKS	2	81	2916
      INDEX FULL SCAN	ODB_STAT	ACCOUNTS_ACCNUM	613	2	
    TABLE ACCESS FULL	ODB_STAT	KL_R030	2	209	1672
   VIEW	SYS		2	1	32
    FILTER					
     TABLE ACCESS FULL	ODB_STAT	ONEPB_BANKS	2	1	36


те разница
NESTED LOOPS
INDEX FULL SCAN ODB_STAT ACCOUNTS_ACCNUM 613 2

HASH JOIN
TABLE ACCESS FULL ODB_STAT ACCOUNTS 280 158298 5540430
30 окт 07, 11:41    [4854660]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
StMikle
а 10ка понимает хинты?????????????- онаже умная- ей наши подсказки ненужны, а если их встречает то клинит ее от злости...


а это наверно просто так впихнули в оф док
30 окт 07, 11:42    [4854667]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Первый пробный шар, поле у Вас случайно не not null?
30 окт 07, 11:42    [4854672]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
StMikle
а 10ка понимает хинты?????????????- онаже умная- ей наши подсказки ненужны, а если их встречает то клинит ее от злости...

Издеваетесь?
не смешно
30 окт 07, 11:43    [4854677]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
Jannny
Первый пробный шар, поле у Вас случайно не not null?

поля not null
и null в них нет
30 окт 07, 11:46    [4854702]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
андр_птм
Member

Откуда:
Сообщений: 120
Jannny
Первый пробный шар, поле у Вас случайно не not null?
Интересно, как это может повлиять на результат с правилно работающим Ораклом?
30 окт 07, 11:47    [4854706]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
андр_птм
Member

Откуда:
Сообщений: 120
Dimka08
один и тот же запрос
c хинтом указывающим конкретный индекс - нет записей
без хинта есть одна
правильно должна быть одна
А в запросе есть функции с пакетными переменными?
30 окт 07, 11:48    [4854720]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
А filter predicate покажите? Ну и собственно строчку запроса с условием по ACCOUNTS_ACCNUM, чтобы сравнить
30 окт 07, 11:50    [4854735]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
андр_птм
Jannny
Первый пробный шар, поле у Вас случайно не not null?
Интересно, как это может повлиять на результат с правилно работающим Ораклом?
Неправильно работающий export...
30 окт 07, 11:51    [4854740]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
андр_птм
А в запросе есть функции с пакетными переменными?

нет
30 окт 07, 11:51    [4854743]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
возможно что это аутер джойн дает
    select /*+ index(a ACCO UNTS_ACCNUM) */ a.account_num, a.r020, b.bnk_name, r.a3, 
    
    round(nvl((select /*+ index(sl I_ACCSALDO_ACCID) */ sl.saldo from accsaldo sl
        where sl.mfo = :mfo_l
          and sl.account_id = a.account_id
          and sl.operdaydate = 
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.operdaydate) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
          and sl.doc_id =
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.doc_id) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
      ),0)/1000, 3) as bsaldo,

    round(nvl((select /*+ index(sl I_ACCSALDO_ACCID) */ sl.saldo from accsaldo sl
        where sl.mfo = :mfo_l
          and sl.account_id = a.account_id
          and sl.operdaydate = 
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.operdaydate) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
          and sl.doc_id =
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.doc_id) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
      ),0)/1000, 3)
    - nvl((select round(sum(t.summa/1000),3) 
           from tmp_1pb t 
           where t.cr_account_num = a.account_num
             and t.inout = 1
             and t.mfo = :mfo_l
             and t.operdaydate between :begdate and :enddate)
      ,0)  
    + nvl((select round(sum(t.summa/1000),3) 
           from tmp_1pb t 
           where t.db_account_num = a.account_num
             and t.inout = 0
             and t.mfo = :mfo_l
             and t.operdaydate between :begdate and :enddate)
      ,0) as esaldo

    from onepb_banks b right outer join 
        (accounts a inner join kl_r030 r on a.r030 = r.r030)
      on b.acc_num = a.account_num  and a.mfo = :mfo_l
    where a.account_num in

    (select distinct 
      case
        when t.inout = 0 then t.db_account_num
        when t.inout = 1 then t.cr_account_num
      end as cacc
    from tmp_1pb t
    where t.operdaydate between :begdate and :enddate
      and t.mfo = :mfo_l
      and 
        case
          when t.inout = 0 then t.db_account_num
          when t.inout = 1 then t.cr_account_num
        end
        not in
        (select aa.account_num
        from onepb_dbfsaldo s inner join 
          (onepb_banks bb inner join 
            (accounts aa inner join kl_r030 rr on aa.r030 = rr.r030)
          on bb.acc_num = aa.account_num  and aa.mfo = :mfo_l)
        on s.partn = bb.bnk_name and s.valkod = rr.a3 and aa.r020=
          case
            when s.kod='9111' then '1500'
            when s.kod='9221' then '1600'
          end

        where
        trim(s.kor) is null
          and s.kod in ('9111','9221')
          and s.mec = :lmonth
          and s.god = :lyear))

      order by 3,4
30 окт 07, 11:54    [4854758]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
пацталом
Guest
    round(nvl((select /*+ index(sl I_ACCSALDO_ACCID) */ sl.saldo from accsaldo sl
        where sl.mfo = :mfo_l
          and sl.account_id = a.account_id
          and sl.operdaydate = 
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.operdaydate) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
          and sl.doc_id =
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.doc_id) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
      ),0)/1000, 3)
30 окт 07, 12:12    [4854861]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
пацталом
    round(nvl((select /*+ index(sl I_ACCSALDO_ACCID) */ sl.saldo from accsaldo sl
        where sl.mfo = :mfo_l
          and sl.account_id = a.account_id
          and sl.operdaydate = 
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.operdaydate) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
          and sl.doc_id =
            (select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.doc_id) 
            from accsaldo sll
            where sll.mfo = :mfo_l
              and sll.account_id = sl.account_id
              and sll.operdaydate < :begdate)
      ),0)/1000, 3)

что б там ни было
это не объясняет эффект с хинтом
30 окт 07, 12:19    [4854911]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
дрымс
Guest
Dimka08

без явного указания индекса (ACCOUNTS_ACCNUM) -работает

SELECT STATEMENT, GOAL = ALL_ROWS			492	8	752
 FILTER					
  HASH GROUP BY			295	1	66
   FILTER					
    TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	3	17	697
     NESTED LOOPS			283	1569	103554
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	92	2300
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	2	1	
    SORT AGGREGATE				1	26
     TABLE ACCESS BY INDEX ROWID	ODB_STAT	ACCSALDO	11	92	2392
      INDEX RANGE SCAN	ODB_STAT	I_ACCSALDO_ACCID	4	17	
 FILTER					


Научитесь нормально план получать, в отформатированном виде.

Даже смотреть неохота
30 окт 07, 12:23    [4854936]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Dimka08
это не объясняет эффект с хинтом
Как поживают предикаты? :)
30 окт 07, 12:23    [4854937]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
пацталом
Guest
Интересно, зачем хинты в подзапросе?
select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.doc_id) 
from accsaldo sll
/*+ index(sl        -> sl
from accsaldo sll -> sll
30 окт 07, 12:29    [4854970]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
Дима, попробуй переписать без ANSI-джоинов.
30 окт 07, 13:19    [4855349]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
Jannny
Dimka08
это не объясняет эффект с хинтом
Как поживают предикаты? :)



SELECT STATEMENT, GOAL = ALL_ROWS IO cost=470 Cost=492 Cardinality=8 CPU cost=135626983 Bytes=752
FILTER Filter predicates="SL"."OPERDAYDATE"=MAX("SLL"."OPERDAYDATE")
HASH GROUP BY IO cost=291 Cost=295 Cardinality=1 CPU cost=22870154 Bytes=66
FILTER Filter predicates="SL"."DOC_ID"= (SELECT /*+ */ MAX("SLL"."DOC_ID") FROM "ACCSALDO" "SLL" WHERE "SLL"."OPERDAYDATE"<:BEGDATE AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."MFO"=:MFO_L)
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=3 Cost=3 Cardinality=17 CPU cost=172267 Bytes=697
NESTED LOOPS IO cost=280 Cost=283 Cardinality=1569 CPU cost=15880643 Bytes=103554
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=92 CPU cost=32086 Bytes=2300
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"="SL"."ACCOUNT_ID" Filter predicates="SL"."ACCOUNT_ID"=:B1 IO cost=2 Cost=2 Cardinality=1 CPU cost=164843
SORT AGGREGATE Cardinality=1 Bytes=26
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=11 Cost=11 Cardinality=92 CPU cost=86076 Bytes=2392
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=17 CPU cost=32086
FILTER Filter predicates="SL"."OPERDAYDATE"=MAX("SLL"."OPERDAYDATE")
HASH GROUP BY IO cost=291 Cost=295 Cardinality=1 CPU cost=22870154 Bytes=66
FILTER Filter predicates="SL"."DOC_ID"= (SELECT /*+ */ MAX("SLL"."DOC_ID") FROM "ACCSALDO" "SLL" WHERE "SLL"."OPERDAYDATE"<:BEGDATE AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."MFO"=:MFO_L)
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=3 Cost=3 Cardinality=17 CPU cost=172267 Bytes=697
NESTED LOOPS IO cost=280 Cost=283 Cardinality=1569 CPU cost=15880643 Bytes=103554
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=92 CPU cost=32086 Bytes=2300
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"="SL"."ACCOUNT_ID" Filter predicates="SL"."ACCOUNT_ID"=:B1 IO cost=2 Cost=2 Cardinality=1 CPU cost=164843
SORT AGGREGATE Cardinality=1 Bytes=26
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=11 Cost=11 Cardinality=92 CPU cost=86076 Bytes=2392
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=17 CPU cost=32086
SORT AGGREGATE Cardinality=1 Bytes=37
FILTER Filter predicates=TO_DATE(:BEGDATE)<=TO_DATE(:ENDDATE)
TABLE ACCESS FULL Object name=TMP_1PB Filter predicates="T"."CR_ACCOUNT_NUM"=:B1 AND "T"."MFO"=:MFO_L AND "T"."INOUT"=1 AND "T"."OPERDAYDATE">=:BEGDATE AND "T"."OPERDAYDATE"<=:ENDDATE IO cost=141 Cost=145 Cardinality=1 CPU cost=24996535 Bytes=37
SORT AGGREGATE Cardinality=1 Bytes=36
FILTER Filter predicates=TO_DATE(:BEGDATE)<=TO_DATE(:ENDDATE)
TABLE ACCESS FULL Object name=TMP_1PB Filter predicates="T"."DB_ACCOUNT_NUM"=:B1 AND "T"."MFO"=:MFO_L AND "T"."INOUT"=0 AND "T"."OPERDAYDATE">=:BEGDATE AND "T"."OPERDAYDATE"<=:ENDDATE IO cost=141 Cost=145 Cardinality=1 CPU cost=24282687 Bytes=36
SORT ORDER BY IO cost=470 Cost=492 Cardinality=8 CPU cost=135626983 Bytes=752
NESTED LOOPS OUTER IO cost=470 Cost=491 Cardinality=8 CPU cost=129472892 Bytes=752
HASH JOIN Access predicates="A"."R030"="R"."R030" IO cost=454 Cost=475 Cardinality=8 CPU cost=129058114 Bytes=496
HASH JOIN Access predicates="A"."ACCOUNT_NUM"="CACC" IO cost=452 Cost=472 Cardinality=8 CPU cost=125875832 Bytes=432
VIEW Object name=VW_NSO_3 IO cost=183 Cost=190 Cardinality=5 CPU cost=40481395 Bytes=95
HASH UNIQUE IO cost=183 Cost=190 Cardinality=5 CPU cost=40481395 Bytes=225
FILTER Filter predicates=NOT EXISTS (SELECT /*+ */ 0 FROM "KL_R030" "RR","ACCOUNTS" "AA","ONEPB_BANKS" "BB","ONEPB_DBFSALDO" "S" WHERE "S"."GOD"=TO_NUMBER(:LYEAR) AND "S"."MEC"=TO_NUMBER(:LMONTH) AND TRIM("S"."KOR") IS NULL AND ("S"."KOD"='9111' OR "S"."KOD"='9221') AND "BB"."ACC_NUM"="AA"."ACCOUNT_NUM" AND "S"."PARTN"="BB"."BNK_NAME" AND "AA"."R030"="RR"."R030" AND "AA"."R020"=CASE WHEN ("S"."KOD"='9111') THEN '1500' WHEN ("S"."KOD"='9221') THEN '1600' END AND "AA"."MFO"=:MFO_L AND LNNVL("AA"."ACCOUNT_NUM"<>CASE :B1 WHEN 0 THEN :B2 WHEN 1 THEN :B3 END ) AND "S"."VALKOD"="RR"."A3")
FILTER Filter predicates=TO_DATE(:BEGDATE)<=TO_DATE(:ENDDATE)
TABLE ACCESS FULL Object name=TMP_1PB Filter predicates="T"."MFO"=:MFO_L AND "T"."OPERDAYDATE">=:BEGDATE AND "T"."OPERDAYDATE"<=:ENDDATE IO cost=141 Cost=145 Cardinality=5 CPU cost=25654343 Bytes=225
HASH JOIN Access predicates="S"."PARTN"="BB"."BNK_NAME" AND "BB"."ACC_NUM"="AA"."ACCOUNT_NUM" IO cost=16 Cost=17 Cardinality=1 CPU cost=3303735 Bytes=117
TABLE ACCESS BY INDEX ROWID Object name=ACCOUNTS Filter predicates=LNNVL("AA"."ACCOUNT_NUM"<>CASE :B1 WHEN 0 THEN :B2 WHEN 1 THEN :B3 END ) IO cost=1 Cost=1 Cardinality=1 CPU cost=9253 Bytes=30
NESTED LOOPS IO cost=14 Cost=14 Cardinality=1 CPU cost=169603 Bytes=81
NESTED LOOPS IO cost=13 Cost=13 Cardinality=2 CPU cost=159100 Bytes=102
TABLE ACCESS BY INDEX ROWID Object name=ONEPB_DBFSALDO Filter predicates=TRIM("S"."KOR") IS NULL AND ("S"."KOD"='9111' OR "S"."KOD"='9221') IO cost=11 Cost=11 Cardinality=2 CPU cost=141437 Bytes=86
INDEX RANGE SCAN Object name=IDX_MESGODNAME Access predicates="S"."MEC"=TO_NUMBER(:LMONTH) AND "S"."GOD"=TO_NUMBER(:LYEAR) IO cost=2 Cost=2 Cardinality=80 CPU cost=30443
TABLE ACCESS BY INDEX ROWID Object name=KL_R030 IO cost=1 Cost=1 Cardinality=1 CPU cost=8831 Bytes=8
INDEX RANGE SCAN Object name=IND_A3 Access predicates="S"."VALKOD"="RR"."A3" IO cost=0 Cost=0 Cardinality=1 CPU cost=1250
INDEX RANGE SCAN Object name=ACCOUNTS_MFO_R020_R030 Access predicates="AA"."MFO"=:MFO_L AND "AA"."R020"=CASE WHEN ("S"."KOD"='9111') THEN '1500' WHEN ("S"."KOD"='9221') THEN '1600' END AND "AA"."R030"="RR"."R030" IO cost=0 Cost=0 Cardinality=1 CPU cost=1250
TABLE ACCESS FULL Object name=ONEPB_BANKS IO cost=2 Cost=2 Cardinality=81 CPU cost=49377 Bytes=2916
TABLE ACCESS FULL Object name=ACCOUNTS IO cost=269 Cost=280 Cardinality=158298 CPU cost=66487382 Bytes=5540430
TABLE ACCESS FULL Object name=KL_R030 IO cost=2 Cost=2 Cardinality=209 CPU cost=83677 Bytes=1672
VIEW IO cost=2 Cost=2 Cardinality=1 CPU cost=51847 Bytes=32
FILTER Filter predicates="A"."MFO"=:MFO_L
TABLE ACCESS FULL Object name=ONEPB_BANKS Filter predicates="B"."ACC_NUM"="A"."ACCOUNT_NUM" IO cost=2 Cost=2 Cardinality=1 CPU cost=51847 Bytes=36


с индексом



SELECT STATEMENT, GOAL = ALL_ROWS IO cost=1681 Cost=1717 Cardinality=8 CPU cost=219228178 Bytes=752
FILTER Filter predicates="SL"."OPERDAYDATE"=MAX("SLL"."OPERDAYDATE")
HASH GROUP BY IO cost=291 Cost=295 Cardinality=1 CPU cost=22870154 Bytes=66
FILTER Filter predicates="SL"."DOC_ID"= (SELECT /*+ */ MAX("SLL"."DOC_ID") FROM "ACCSALDO" "SLL" WHERE "SLL"."OPERDAYDATE"<:BEGDATE AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."MFO"=:MFO_L)
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=3 Cost=3 Cardinality=17 CPU cost=172267 Bytes=697
NESTED LOOPS IO cost=280 Cost=283 Cardinality=1569 CPU cost=15880643 Bytes=103554
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=92 CPU cost=32086 Bytes=2300
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"="SL"."ACCOUNT_ID" Filter predicates="SL"."ACCOUNT_ID"=:B1 IO cost=2 Cost=2 Cardinality=1 CPU cost=164843
SORT AGGREGATE Cardinality=1 Bytes=26
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=11 Cost=11 Cardinality=92 CPU cost=86076 Bytes=2392
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=17 CPU cost=32086
FILTER Filter predicates="SL"."OPERDAYDATE"=MAX("SLL"."OPERDAYDATE")
HASH GROUP BY IO cost=291 Cost=295 Cardinality=1 CPU cost=22870154 Bytes=66
FILTER Filter predicates="SL"."DOC_ID"= (SELECT /*+ */ MAX("SLL"."DOC_ID") FROM "ACCSALDO" "SLL" WHERE "SLL"."OPERDAYDATE"<:BEGDATE AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."MFO"=:MFO_L)
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=3 Cost=3 Cardinality=17 CPU cost=172267 Bytes=697
NESTED LOOPS IO cost=280 Cost=283 Cardinality=1569 CPU cost=15880643 Bytes=103554
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=92 CPU cost=32086 Bytes=2300
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"="SL"."ACCOUNT_ID" Filter predicates="SL"."ACCOUNT_ID"=:B1 IO cost=2 Cost=2 Cardinality=1 CPU cost=164843
SORT AGGREGATE Cardinality=1 Bytes=26
TABLE ACCESS BY INDEX ROWID Object name=ACCSALDO IO cost=11 Cost=11 Cardinality=92 CPU cost=86076 Bytes=2392
INDEX RANGE SCAN Object name=I_ACCSALDO_ACCID Access predicates="SLL"."MFO"=:MFO_L AND "SLL"."ACCOUNT_ID"=:B1 AND "SLL"."OPERDAYDATE"<:BEGDATE IO cost=4 Cost=4 Cardinality=17 CPU cost=32086
SORT AGGREGATE Cardinality=1 Bytes=37
FILTER Filter predicates=TO_DATE(:BEGDATE)<=TO_DATE(:ENDDATE)
TABLE ACCESS FULL Object name=TMP_1PB Filter predicates="T"."CR_ACCOUNT_NUM"=:B1 AND "T"."MFO"=:MFO_L AND "T"."INOUT"=1 AND "T"."OPERDAYDATE">=:BEGDATE AND "T"."OPERDAYDATE"<=:ENDDATE IO cost=141 Cost=145 Cardinality=1 CPU cost=24996535 Bytes=37
SORT AGGREGATE Cardinality=1 Bytes=36
FILTER Filter predicates=TO_DATE(:BEGDATE)<=TO_DATE(:ENDDATE)
TABLE ACCESS FULL Object name=TMP_1PB Filter predicates="T"."DB_ACCOUNT_NUM"=:B1 AND "T"."MFO"=:MFO_L AND "T"."INOUT"=0 AND "T"."OPERDAYDATE">=:BEGDATE AND "T"."OPERDAYDATE"<=:ENDDATE IO cost=141 Cost=145 Cardinality=1 CPU cost=24282687 Bytes=36
SORT ORDER BY IO cost=1681 Cost=1717 Cardinality=8 CPU cost=219228178 Bytes=752
NESTED LOOPS OUTER IO cost=1681 Cost=1716 Cardinality=8 CPU cost=213074086 Bytes=752
HASH JOIN Access predicates="A"."R030"="R"."R030" IO cost=1665 Cost=1700 Cardinality=8 CPU cost=212659309 Bytes=496
TABLE ACCESS BY INDEX ROWID Object name=ACCOUNTS IO cost=296 Cost=301 Cardinality=2 CPU cost=33799126 Bytes=70
NESTED LOOPS IO cost=1663 Cost=1697 Cardinality=8 CPU cost=209477027 Bytes=432
VIEW Object name=VW_NSO_3 IO cost=183 Cost=190 Cardinality=5 CPU cost=40481395 Bytes=95
HASH UNIQUE IO cost=183 Cost=190 Cardinality=5 CPU cost=40481395 Bytes=225
FILTER Filter predicates=NOT EXISTS (SELECT /*+ */ 0 FROM "KL_R030" "RR","ACCOUNTS" "AA","ONEPB_BANKS" "BB","ONEPB_DBFSALDO" "S" WHERE "S"."GOD"=TO_NUMBER(:LYEAR) AND "S"."MEC"=TO_NUMBER(:LMONTH) AND TRIM("S"."KOR") IS NULL AND ("S"."KOD"='9111' OR "S"."KOD"='9221') AND "BB"."ACC_NUM"="AA"."ACCOUNT_NUM" AND "S"."PARTN"="BB"."BNK_NAME" AND "AA"."R030"="RR"."R030" AND "AA"."R020"=CASE WHEN ("S"."KOD"='9111') THEN '1500' WHEN ("S"."KOD"='9221') THEN '1600' END AND "AA"."MFO"=:MFO_L AND LNNVL("AA"."ACCOUNT_NUM"<>CASE :B1 WHEN 0 THEN :B2 WHEN 1 THEN :B3 END ) AND "S"."VALKOD"="RR"."A3")
FILTER Filter predicates=TO_DATE(:BEGDATE)<=TO_DATE(:ENDDATE)
TABLE ACCESS FULL Object name=TMP_1PB Filter predicates="T"."MFO"=:MFO_L AND "T"."OPERDAYDATE">=:BEGDATE AND "T"."OPERDAYDATE"<=:ENDDATE IO cost=141 Cost=145 Cardinality=5 CPU cost=25654343 Bytes=225
HASH JOIN Access predicates="S"."PARTN"="BB"."BNK_NAME" AND "BB"."ACC_NUM"="AA"."ACCOUNT_NUM" IO cost=16 Cost=17 Cardinality=1 CPU cost=3303735 Bytes=117
TABLE ACCESS BY INDEX ROWID Object name=ACCOUNTS Filter predicates=LNNVL("AA"."ACCOUNT_NUM"<>CASE :B1 WHEN 0 THEN :B2 WHEN 1 THEN :B3 END ) IO cost=1 Cost=1 Cardinality=1 CPU cost=9253 Bytes=30
NESTED LOOPS IO cost=14 Cost=14 Cardinality=1 CPU cost=169603 Bytes=81
NESTED LOOPS IO cost=13 Cost=13 Cardinality=2 CPU cost=159100 Bytes=102
TABLE ACCESS BY INDEX ROWID Object name=ONEPB_DBFSALDO Filter predicates=TRIM("S"."KOR") IS NULL AND ("S"."KOD"='9111' OR "S"."KOD"='9221') IO cost=11 Cost=11 Cardinality=2 CPU cost=141437 Bytes=86
INDEX RANGE SCAN Object name=IDX_MESGODNAME Access predicates="S"."MEC"=TO_NUMBER(:LMONTH) AND "S"."GOD"=TO_NUMBER(:LYEAR) IO cost=2 Cost=2 Cardinality=80 CPU cost=30443
TABLE ACCESS BY INDEX ROWID Object name=KL_R030 IO cost=1 Cost=1 Cardinality=1 CPU cost=8831 Bytes=8
INDEX RANGE SCAN Object name=IND_A3 Access predicates="S"."VALKOD"="RR"."A3" IO cost=0 Cost=0 Cardinality=1 CPU cost=1250
INDEX RANGE SCAN Object name=ACCOUNTS_MFO_R020_R030 Access predicates="AA"."MFO"=:MFO_L AND "AA"."R020"=CASE WHEN ("S"."KOD"='9111') THEN '1500' WHEN ("S"."KOD"='9221') THEN '1600' END AND "AA"."R030"="RR"."R030" IO cost=0 Cost=0 Cardinality=1 CPU cost=1250
TABLE ACCESS FULL Object name=ONEPB_BANKS IO cost=2 Cost=2 Cardinality=81 CPU cost=49377 Bytes=2916
INDEX FULL SCAN Object name=ACCOUNTS_ACCNUM Access predicates="A"."ACCOUNT_NUM"="CACC" Filter predicates="A"."ACCOUNT_NUM"="CACC" IO cost=294 Cost=299 Cardinality=2 CPU cost=33784303
TABLE ACCESS FULL Object name=KL_R030 IO cost=2 Cost=2 Cardinality=209 CPU cost=83677 Bytes=1672
VIEW IO cost=2 Cost=2 Cardinality=1 CPU cost=51847 Bytes=32
FILTER Filter predicates="A"."MFO"=:MFO_L
TABLE ACCESS FULL Object name=ONEPB_BANKS Filter predicates="B"."ACC_NUM"="A"."ACCOUNT_NUM" IO cost=2 Cost=2 Cardinality=1 CPU cost=51847 Bytes=36

30 окт 07, 13:36    [4855437]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
пацталом
Интересно, зачем хинты в подзапросе?
select /*+ index(sl I_ACCSALDO_ACCID) */ max(sll.doc_id) 
from accsaldo sll
/*+ index(sl        -> sl
from accsaldo sll -> sll


я не знаю зачем они там, но тк они неправильные
они ни на что не влияют
30 окт 07, 13:38    [4855448]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
Dimka08
Member

Откуда:
Сообщений: 319
andreymx
Дима, попробуй переписать без ANSI-джоинов.

проблема именно в том, что при разном плане один селект может вернуть разные результаты
этот конкретный запрос сейчас перепишут, дело не в нем
30 окт 07, 13:40    [4855469]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Dimka08
andreymx
Дима, попробуй переписать без ANSI-джоинов.

проблема именно в том, что при разном плане один селект может вернуть разные результаты
этот конкретный запрос сейчас перепишут, дело не в нем

Ну, бывает такое. И, имхо, не только бывало, но и будет периодически.
А тот кто использует недотехнику (анси синтаксис джоинов, например)
или коллекционирует экзотику (напр. аналитику на деревьях) - повышет вероятность, ой.., налететь.
30 окт 07, 15:12    [4856011]     Ответить | Цитировать Сообщить модератору
 Re: ?Добавление хинта index меняет результат  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54390
orawish
А тот кто использует недотехнику (анси синтаксис джоинов, например)
или коллекционирует экзотику (напр. аналитику на деревьях) - повышет вероятность, ой.., налететь.
Ну... анси синтаксис джоинов - вроде это "недотехника" как раз для Оракла. Для прочих сиквелов это вроде нормальных механизм?
30 окт 07, 15:21    [4856065]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить