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