Quando vc falou que era 8i, já ficava mesmo no ar a suspeita , já que
recursos como select executado como "coluna" de outro select foram
introduzidos só nos releases finais do 8i, podia ser mesmo que o
explain plan do 8i não tivesse sido corretamente atualizado : fiz o
teste no 8i e tive o mesmo resultado que vc no Personal 8.1.7.4.1 no
windows. E a questão é com as novas sintaxes, um join tradicional
mostra normal o acesso à dept. eis meus testes, tá confirmado :

[EMAIL PROTECTED]:SQL>set autotrace on
[EMAIL PROTECTED]:SQL>
[EMAIL PROTECTED]:SQL>select e.empno, e.sal, (select deptno from dept d where
  2  d.deptno = e.deptno) num_dep
  3  from emp e where sal > 1000;

             EMPNO                SAL            NUM_DEP
------------------ ------------------ ------------------
              7499               1600                 30
              7521               1250                 30
              7566               2975                 20
              7654               1250                 30
              7698               2850                 30
              7782               2450                 10
              7788               3000                 20
              7839               5000                 10
              7844               1500                 30
              7876               1100                 20
              7902               3000                 20
              7934               1300                 10

12 linhas selecionadas.


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=14 Bytes=112)
   1    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=14 Bytes=112)




Statistics
----------------------------------------------------------
       1018  recursive calls
          9  db block gets
        187  consistent gets
          9  physical reads
          0  redo size
       1063  bytes sent via SQL*Net to client
        425  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         26  sorts (memory)
          0  sorts (disk)
         12  rows processed

[EMAIL PROTECTED]:SQL>select e.empno, e.sal, (select dname from dept d where
  2  d.deptno = e.deptno) nome_dep
  3  from emp e where sal > 1000;

             EMPNO                SAL NOME_DEP
------------------ ------------------ --------------
              7499               1600 SALES
              7521               1250 SALES
              7566               2975 RESEARCH
              7654               1250 SALES
              7698               2850 SALES
              7782               2450 ACCOUNTING
              7788               3000 RESEARCH
              7839               5000 ACCOUNTING
              7844               1500 SALES
              7876               1100 RESEARCH
              7902               3000 RESEARCH
              7934               1300 ACCOUNTING

12 linhas selecionadas.


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=14 Bytes=112)
   1    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=14 Bytes=112)




Statistics
----------------------------------------------------------
          0  recursive calls
          4  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
       1115  bytes sent via SQL*Net to client
        425  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
         12  rows processed

[EMAIL PROTECTED]:SQL>


[EMAIL PROTECTED]:SQL>select e.empno, e.sal, d.dname 
  2  from emp e, dept d
  3  where sal > 1000 and d.deptno = e.deptno;

             EMPNO                SAL DNAME
------------------ ------------------ --------------
              7499               1600 SALES
              7521               1250 SALES
              7566               2975 RESEARCH
              7654               1250 SALES
              7698               2850 SALES
              7782               2450 ACCOUNTING
              7788               3000 RESEARCH
              7839               5000 ACCOUNTING
              7844               1500 SALES
              7876               1100 RESEARCH
              7902               3000 RESEARCH
              7934               1300 ACCOUNTING

12 linhas selecionadas.


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=14 Bytes=266)
   1    0   HASH JOIN (Cost=3 Card=14 Bytes=266)
   2    1     TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=4 Bytes=44)
   3    1     TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=14 Bytes=112)




Statistics
----------------------------------------------------------
          0  recursive calls
          8  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
       1112  bytes sent via SQL*Net to client
        425  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
         12  rows processed

[EMAIL PROTECTED]:SQL>

Eu gerei um trace, e nem no .trc há registro do acesso à dept usando o
join no select, é mesmo bug e sem work-around pelo que vejo, então
quem ainda tá na 8i no windows, quando for fazer explain
plan/trace/tkprof, não usar as novas sintaxes...

[]s

Chiappa
--- Em oracle_br@yahoogrupos.com.br, Alexandre Eduardo Borges
<[EMAIL PROTECTED]> escreveu
> Caro chiappa 
>  
>      Essa é exatamente a minha dúvida, como ele trouxe a descrição sem
> acessar a tabela , sendo que só existe índice no código. Rodei o seu
exemplo
> aqui, nossa versão é 8.1.7.4 , olha aí o resultado , será que é pau
dessa
> versão??????
>  
> SQL> select * from V$version;
>  
> BANNER
> -----------------------------------------------------------
> Oracle8i Enterprise Edition Release 8.1.7.4.1 - Production
> PL/SQL Release 8.1.7.4.0 - Production
> CORE    8.1.7.2.1       Production
> TNS for 32-bit Windows: Version 8.1.7.4.0 - Production
> NLSRTL Version 3.4.1.0.0 - Production
> 
>  
> SQL> set autotrace on
> SQL> select e.empno, e.sal, (select deptno from dept d where 
>   2  d.deptno = e.deptno) num_dep
>   3  from emp e where sal > 1000;
>  
>      EMPNO        SAL    NUM_DEP
> ---------- ---------- ----------
>       7499       1600         30
>       7521       1250         30
>       7566       2975         20
>       7654       1250         30
>       7698       2850         30
>       7782       2450         10
>       7788       3000         20
>       7839       5000         10
>       7844       1500         30
>       7876       1100         20
>       7902       3000         20
>  
>      EMPNO        SAL    NUM_DEP
> ---------- ---------- ----------
>       7934       1300         10
>  
> 12 linhas selecionadas.
>  
> 
> Execution Plan
> ----------------------------------------------------------
>    0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=14 Bytes=
>           112)
>  
>    1    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=14 Bytes=112)
> 
>  
>  
>  
> 2º teste=====================================================
>  
>  
> SQL> select e.empno, e.sal, (select dname from dept d where 
>   2  d.deptno = e.deptno) nome_dep 
>   3  from emp e where sal > 1000;
>  
>      EMPNO        SAL NOME_DEP
> ---------- ---------- --------------
>       7499       1600 SALES
>       7521       1250 SALES
>       7566       2975 RESEARCH
>       7654       1250 SALES
>       7698       2850 SALES
>       7782       2450 ACCOUNTING
>       7788       3000 RESEARCH
>       7839       5000 ACCOUNTING
>       7844       1500 SALES
>       7876       1100 RESEARCH
>       7902       3000 RESEARCH
>  
>      EMPNO        SAL NOME_DEP
> ---------- ---------- --------------
>       7934       1300 ACCOUNTING
>  
> 12 linhas selecionadas.
>  
> 
> Execution Plan                
> ----------------------------------------------------------
>    0      SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=1 Card=14 Bytes=
>           112)
>  
>    1    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=14 Bytes=112)
> 
>  
>  
>  
> Viu a diferença ?????????????????????????????/
>  
> Como trouxe o nome do departamento acessando somente a tabela EMP??????
>  
>  
> Obrigado...
> 
> 
>   _____  
> 
> De: jlchiappa [mailto:[EMAIL PROTECTED] 
> Enviada em: terça-feira, 22 de novembro de 2005 10:26
> Para: oracle_br@yahoogrupos.com.br
> Assunto: Re: RES: [oracle_br] PLANO DE EXECUÇÃO
> 
> 
> Ao que eu entendi, o campo descrição ** não tem ** índice nele, então 
> deveria sim ter sido feito um acesso ao índice, ** E ** também um 
> acesso à tabela, exemplo :
> 
> [EMAIL PROTECTED]:SQL>select * from V$version;
> 
> BANNER
> ----------------------------------------------------------------
> Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
> PL/SQL Release 9.2.0.5.0 - Production
> CORE    9.2.0.6.0       Production
> TNS for HPUX: Version 9.2.0.5.0 - Production
> NLSRTL Version 9.2.0.5.0 - Production
> 
> [EMAIL PROTECTED]:SQL>set autotrace on
> 
> ==> primeiro exemplo, select secundário trazendo um campo indexado 
> apenas) :
> 
> [EMAIL PROTECTED]:SQL>select e.empno, e.sal, (select deptno from dept d where 
> d.deptno = e.deptno) num_dep
>   2  from emp e where sal > 1000;
> 
>              EMPNO                SAL            NUM_DEP
> ------------------ ------------------ ------------------
>               7499               1600                 30
>               7521               1250                 30
>               7566               2975                 20
>               7654               1250                 30
>               7698               2850                 30
>               7782               2450                 10
>               7788               3000                 20
>               7839               5000                 10
>               7844               1500                 30
>               7876               1100                 20
>               7902               3000                 20
>               7934               1300                 10
> 
> 12 linhas selecionadas.
> 
> 
> Execution Plan
> ----------------------------------------------------------
>    0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=39)
>    1    0   INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) (Cost=1 Card=1 
> Bytes=13)
>    2    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=1 Bytes=39)
> 
> 
> ==>> CORRETAMENTE mostra apenas um índice unique scan, a tabela DEPT 
> ** não ** foi tocada. Agora vamos fazer um exemplo onde as colunas do 
> select secundário ** não ** constam em índices :
> 
> [EMAIL PROTECTED]:SQL>select e.empno, e.sal, (select dname from dept d where 
> d.deptno = e.deptno) nome_dep 
>   2  from emp e where sal > 1000;
> 
>              EMPNO                SAL NOME_DEP
> ------------------ ------------------ --------------
>               7499               1600 SALES
>               7521               1250 SALES
>               7566               2975 RESEARCH
>               7654               1250 SALES
>               7698               2850 SALES
>               7782               2450 ACCOUNTING
>               7788               3000 RESEARCH
>               7839               5000 ACCOUNTING
>               7844               1500 SALES
>               7876               1100 RESEARCH
>               7902               3000 RESEARCH
>               7934               1300 ACCOUNTING
> 
> 12 linhas selecionadas.
> 
> 
> Execution Plan
> ----------------------------------------------------------
>    0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=39)
>    1    0   TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (Cost=2 Card=1 
> Bytes=22)
>    2    1     INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) (Cost=1 
> Card=1)
>    3    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=1 Bytes=39)
> 
> 
> ==>> olha lá, há um unique scan no índice ** E ** um table acess, já 
> que a informação de DNAME não consta no índice.... Pro colega que 
> perguntou, eu diria pra informar a ** versão *8 de banco, dar um 
> script com os  CREATE TABLE e CREATE INDEXES/constraints , uns 
> INSERTs, que a gente pode tentar reproduzir.
> Uma outra opção é que ele esteja usando FGAC, materialized views, ou 
> algum recurso avançado do tipo, como dito em 
> http://asktom.oracle.com/pls/ask/f?
<http://asktom.oracle.com/pls/ask/f?> 
> p=4950:8:::::F4950_P8_DISPLAYID:7890462890027 muitoas vezes o explain 
> plan & o autotrace se "perdem" com isso, só no TKPROF vc obtém o real.
> 
> []s
> 
> Chiappa
> 
> --- Em oracle_br@yahoogrupos.com.br, "Rosiano Vieira de Sales" 
> <[EMAIL PROTECTED]> escreveu
> > Alexandre ...
> >  
> >               Não sei se entendi ... mas vc esta questionando o 
> porque o plano recuperou a descrição sendo que o acesso foi feito 
> apenas pelo índice ....
> >  
> >                 Então mas na realidade o índice é apenas um caminho 
> mais rápido (ou não) para o registro em si ... e na query vc faz um 
> join da tabela B com a A ....então ele recupera sem problemas mesmo 
> que não esteja no plano ....
> >  
> >                Se eu não estiver errado ele não recupera no plano 
> porque trata-se de uma sub-query ... mas não tenho certeza ...
> >  
> >                
> >                 
> > 
> >       -----Mensagem original----- 
> >       De: oracle_br@yahoogrupos.com.br em nome de Alexandre Eduardo 
> Borges 
> >       Enviada: seg 21/11/2005 18:50 
> >       Para: oracle_br@yahoogrupos.com.br 
> >       Cc: 
> >       Assunto: [oracle_br] PLANO DE EXECUÇÃO
> >       
> >       
> > 
> > 
> >         Olá pessoal
> >          
> >       
> >       oracle 8.1.7.4
> >       windown 2000 server
> >       
> >       
> >       
> >       
> >       Tenho duas tabelas , uma rpc_docm_digitado onde existe o 
> código de status e
> >       outra rpc_status onde está a
> >       descrição do status, na primeira tabela existe um índice
> >       IXRPC43_COD_RPC_STATUS no código da descrição .
> >       
> >         Pelo plano de execução  abaixo como a descrição foi 
> recuperada se não
> >       consta do plano ?
> >       O único acesso que existe é o pelo índice  .
> >       
> >       
> >       select  a.rpc_status_codigo , ( select descricao from 
> rpc_status b where
> >       b.codigo =a.rpc_status_codigo)
> >       from rpc_docm_digitado a
> >       where a.rpc_status_codigo =0
> >       
> >         SQL Statement from editor:
> >         
> >         
> >         ------------------------------------------------------------
> >          
> >         Statement Id=4044   Type=
> >         Cost=2,64039087471493E-308  TimeStamp=21-11-05::18::43:01
> >       
> >              (1)  SELECT STATEMENT  FIRST_ROWS
> >            Est. Rows: 3.165  Cost: 4
> >              (2)  NON-UNIQUE INDEX RANGE SCAN 
> ADMRPC.IXRPC43_COD_RPC_STATUS
> >       [Analyzed]
> >            Est. Rows: 3.165  Cost: 11
> >       
> >       
> >       
> >       [As partes desta mensagem que não continham texto foram 
> removidas]
> >       
> >       
> >       
> >       --------------------------------------------------------------
> ------------------------------------------------------------
> >       Atenção! As mensagens deste grupo são de acesso público e 
> de inteira responsabilidade de seus remetentes.
> >       Acesse: http://www.mail- <http://www.mail-> 
> archive.com/oracle_br@yahoogrupos.com.br/
> >       --------------------------------------------------------------
> ------------------------------------------------------------
> _____________________________________________________________________
> >       Area de download do grupo - 
> http://www.4shared.com/dir/101727/a4dcc423
> <http://www.4shared.com/dir/101727/a4dcc423>  
> >       Links do Yahoo! Grupos
> >       
> >       
> >       
> >       
> >       
> >       
> >       
> >       
> >       
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> 
> 
>
----------------------------------------------------------------------------
> ----------------------------------------------
> Atenção! As mensagens deste grupo são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> <http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/>  
>
----------------------------------------------------------------------------
>
----------------------------------------------______________________________
> _______________________________________
> Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423
> <http://www.4shared.com/dir/101727/a4dcc423>  
> 
> 
> 
> Yahoo! Grupos, um serviço oferecido por:      
> 
> PUBLICIDADE
> 
> 
>  
>
<http://br.rd.yahoo.com/SIG=12ffuh3th/M=365837.7000707.7924794.2369893/D=brc
>
lubs/S=2137114689:HM/Y=BR/EXP=1132673335/A=2950750/R=2/id=noscript/SIG=10tif
> t5qr/*http://br.movies.yahoo.com/> 
> 
>   _____  
> 
> Links do Yahoo! Grupos
> 
> 
> *     Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/oracle_br/
> <http://br.groups.yahoo.com/group/oracle_br/> 
>   
> 
> *     Para sair deste grupo, envie um e-mail para:
> [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]> 
>   
> 
> *     O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
> Serviço do Yahoo! <http://br.yahoo.com/info/utos.html> . 
> 
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]




--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a