Res: [oracle_br] Full Table Scan, SIM ou NÃO ?

2009-10-13 Por tôpico Anderson Araujo de Oliveira
Depende da quantidade de linhas que você precisa retornar.
De acordo com o plano de execução que você mandou, o Oracle procura no indice 
por 1 registro, pega o rowid e com esse rowid ele busca apenas 1 registro na 
tabela.
Provavelmente ele analisou que é mais rapido ler o indice para encontrar 1 
rowid e depois ir direto nesse rowid na tabela, sem ter que ler as milhoes de 
linhas.
Lembrando se o retorno for pequeno, vale o indice, se for muitos registros 
(quase a tabela inteira) vale o full table scan, num meio termo talvez teria 
que apelar para outras coisas como tabela particionada ou materialized view, 
depende da situação





De: Evandro Giachetto 
Para: oracle_br@yahoogrupos.com.br
Enviadas: Ter, Outubro 13, 2009 9:46:37 AM
Assunto: Re: [oracle_br] Full Table Scan, SIM ou NÃO?

  
Na verdade, o oracle se baseia nas estatísticas de determinado índice para
saber se utilizará ou não de full table scan.

Ele verifica se, a quantidade de registros que retornará utilizando
determinado índice é maior que uma porcentagem do total da tabela (que não
me lembro agora). Se for maior, compensa ele utilizar full table scan, senão
o índice.

Att.

Evandro Giachetto
Oracle Certified Associate
evan...@clickintera tiva.com. br

2009/10/13 Jairo Azevedo 

>
>
> Se a sua tabela possui menos de 400 registros, um tableScan tem o mesmo
> efeito que o indice (ou de repente pode ser ateh melhor que o indice!)
> Para tabelas com tamanho superior de registros, o recomendavel é que o
> otimizador opte pelo índice e depois a página de dados.
>
> 2009/10/13 fsilva6 >
>
> >
> >
> > Fala galera, tudo beleza?
> >
> > Estou com uma pequena duvida. Bom tenho uma mega tabela com 20 milhões de
> > registros. Ao verificar o plano de execução pude identificar que o oracle
> > decidiu acessar o index e depois a tabela, como não estou conseguindo
> > acessar diretamente o index não seria melhor fazer um full table scan na
> > tabela ao invés de fazer dois acessos (index e tabela)?
> >
> > 27 TABLE ACCESS BY INDEX ROWID TABLE ODS.ODS_CONTR_ SERVICES_ CAP
> > 26 INDEX FULL SCAN INDEX (UNIQUE) ODS.PK_ODS_CONTR_ SERVICES_ CAP
> >
> >
> >
>
> --
> Jairo Azevedo
> jsouza...@gmail. com 
> protheus_lp@ yahoo.com. br 
> (21) -6492
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> 
>

[As partes desta mensagem que não continham texto foram removidas]


   


  

Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Full Table Scan, SIM ou NÃO?

2009-10-13 Por tôpico Evandro Giachetto
Na verdade, o oracle se baseia nas estatísticas de determinado índice para
saber se utilizará ou não de full table scan.

Ele verifica se, a quantidade de registros que retornará utilizando
determinado índice é maior que uma porcentagem do total da tabela (que não
me lembro agora). Se for maior, compensa ele utilizar full table scan, senão
o índice.

Att.

Evandro Giachetto
Oracle Certified Associate
evan...@clickinterativa.com.br


2009/10/13 Jairo Azevedo 

>
>
> Se a sua tabela possui menos de 400 registros, um tableScan tem o mesmo
> efeito que o indice (ou de repente pode ser ateh melhor que o indice!)
> Para tabelas com tamanho superior de registros, o recomendavel é que o
> otimizador opte pelo índice e depois a página de dados.
>
> 2009/10/13 fsilva6 >
>
> >
> >
> > Fala galera, tudo beleza?
> >
> > Estou com uma pequena duvida. Bom tenho uma mega tabela com 20 milhões de
> > registros. Ao verificar o plano de execução pude identificar que o oracle
> > decidiu acessar o index e depois a tabela, como não estou conseguindo
> > acessar diretamente o index não seria melhor fazer um full table scan na
> > tabela ao invés de fazer dois acessos (index e tabela)?
> >
> > 27 TABLE ACCESS BY INDEX ROWID TABLE ODS.ODS_CONTR_SERVICES_CAP
> > 26 INDEX FULL SCAN INDEX (UNIQUE) ODS.PK_ODS_CONTR_SERVICES_CAP
> >
> >
> >
>
> --
> Jairo Azevedo
> jsouza...@gmail.com 
> protheus...@yahoo.com.br 
> (21) -6492
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Full Table Scan, SIM ou NÃO?

2009-10-13 Por tôpico Jairo Azevedo
Se a sua tabela possui menos de 400 registros, um tableScan tem o mesmo
efeito que o indice (ou de repente pode ser ateh melhor que o indice!)
Para tabelas com tamanho superior de registros, o recomendavel é que o
otimizador opte pelo índice e depois a página de dados.



2009/10/13 fsilva6 

>
>
> Fala galera, tudo beleza?
>
> Estou com uma pequena duvida. Bom tenho uma mega tabela com 20 milhões de
> registros. Ao verificar o plano de execução pude identificar que o oracle
> decidiu acessar o index e depois a tabela, como não estou conseguindo
> acessar diretamente o index não seria melhor fazer um full table scan na
> tabela ao invés de fazer dois acessos (index e tabela)?
>
> 27 TABLE ACCESS BY INDEX ROWID TABLE ODS.ODS_CONTR_SERVICES_CAP
> 26 INDEX FULL SCAN INDEX (UNIQUE) ODS.PK_ODS_CONTR_SERVICES_CAP
>
>  
>



-- 
Jairo Azevedo
jsouza...@gmail.com
protheus...@yahoo.com.br
(21) -6492


[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Full Table Scan, SIM ou NÃO?

2009-10-13 Por tôpico fsilva6
Fala galera, tudo beleza?

Estou com uma pequena duvida. Bom tenho uma mega tabela com 20 milhões de 
registros. Ao verificar o plano de execução pude identificar que o oracle 
decidiu acessar o index e depois a tabela, como não estou conseguindo acessar 
diretamente o index não seria melhor fazer um full table scan na tabela ao 
invés de fazer dois acessos (index e tabela)?

27 TABLE ACCESS BY INDEX ROWID TABLE ODS.ODS_CONTR_SERVICES_CAP
26 INDEX FULL SCAN INDEX (UNIQUE) ODS.PK_ODS_CONTR_SERVICES_CAP



 




Re: [oracle_br] FULL TABLE..

2009-09-15 Por tôpico Márcio Ricardo Alves da Silva
Obrigado Marcelo pela dica, não conhecia essa. Então, coloquei o Ano e agora 
ficou bom o custo da minha consulta.

  - Original Message - 
  From: Marcelo 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Tuesday, September 15, 2009 8:43 AM
  Subject: RE: [oracle_br] FULL TABLE..


Marcio,

  Uma dica que eu aprendi no dia-a-dia de SQL.

  Sempre comece as clausulas do WHERE de baixo para cima seguindo um índice.

  Como você mencionou que o índice começa pelo campo ANO, não vi este campo no
  where, portanto não vai ter jeito, vai ser full scan mesmo.

  select ht01.un,
  ht01.periodo_mov as dt_mov,
  sum(nvl(ht01.vr_ap, 0)) as vr_ap,
  sum(nvl(ht01.vr_av, 0)) as vr_av
  from ht01_hist_venda ht01
  where (:5 is null or ht01.un = :6)

  and ht01.periodo_mov between :7 and :8 
  and ht01.tipo = 4
  AND ANO = 2009 -- ou então usar IN(2009,2008) não use between quando
  possível pois custa mais
  group by ht01.un, ht01.periodo_mov

  From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On
  Behalf Of Márcio Ricardo Alves da Silva
  Sent: Tuesday, September 15, 2009 8:20 AM
  To: oracle_br@yahoogrupos.com.br; gpora...@yahoogrupos.com.br
  Subject: [oracle_br] FULL TABLE..

  Bom dia!

  Tenho um select que está fazendo FULL TABLE, e a tabela que está fazendo
  FULL TABLE tem 50 milhões de registros, o select é esse:

  select ht01.un,
  ht01.periodo_mov as dt_mov,
  sum(nvl(ht01.vr_ap, 0)) as vr_ap,
  sum(nvl(ht01.vr_av, 0)) as vr_av
  from ht01_hist_venda ht01
  where (:5 is null or ht01.un = :6)
  and ht01.periodo_mov between :7 and :8
  and ht01.tipo = 4
  group by ht01.un
  ,ht01.periodo_mov

  E tem esse indice criado na tabela.

  ANO, TIPO, PERIODO_MOV, UN, REGIONAL, REGIAO, EQUIPE. ROTA, CLIENTE, PROD

  Forcei o indice com o hint, e o custo dobrou. Onde tem a numeração, são as
  bind variables, acho que o problema é bind :5 is null.

  Alguém tem alguma dica?

  Grato.

  [As partes desta mensagem que não continham texto foram removidas]

  [As partes desta mensagem que não continham texto foram removidas]



  

[As partes desta mensagem que não continham texto foram removidas]



RE: [oracle_br] FULL TABLE..

2009-09-15 Por tôpico Marcelo
Marcio,

 

Uma dica que eu aprendi no dia-a-dia de SQL.

Sempre comece as  clausulas do WHERE de baixo para cima seguindo um índice.

Como você mencionou que o índice começa pelo campo ANO, não vi este campo no
where, portanto não vai ter jeito, vai ser full scan mesmo.

 

 

select ht01.un,
   ht01.periodo_mov as dt_mov,
   sum(nvl(ht01.vr_ap, 0)) as vr_ap,
   sum(nvl(ht01.vr_av, 0)) as vr_av
  from ht01_hist_venda ht01
 where (:5 is null or ht01.un = :6)
   
   and ht01.periodo_mov between :7 and :8   
   and ht01.tipo = 4
   AND ANO = 2009 -- ou então usar IN(2009,2008) não use between quando
possível pois custa mais
 group by ht01.un, ht01.periodo_mov

 

 

From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On
Behalf Of Márcio Ricardo Alves da Silva
Sent: Tuesday, September 15, 2009 8:20 AM
To: oracle_br@yahoogrupos.com.br; gpora...@yahoogrupos.com.br
Subject: [oracle_br] FULL TABLE..

 

  

Bom dia!

Tenho um select que está fazendo FULL TABLE, e a tabela que está fazendo
FULL TABLE tem 50 milhões de registros, o select é esse:

select ht01.un,
ht01.periodo_mov as dt_mov,
sum(nvl(ht01.vr_ap, 0)) as vr_ap,
sum(nvl(ht01.vr_av, 0)) as vr_av
from ht01_hist_venda ht01
where (:5 is null or ht01.un = :6)
and ht01.periodo_mov between :7 and :8
and ht01.tipo = 4
group by ht01.un
,ht01.periodo_mov

E tem esse indice criado na tabela.

ANO, TIPO, PERIODO_MOV, UN, REGIONAL, REGIAO, EQUIPE. ROTA, CLIENTE, PROD

Forcei o indice com o hint, e o custo dobrou. Onde tem a numeração, são as
bind variables, acho que o problema é bind :5 is null.

Alguém tem alguma dica?

Grato.

[As partes desta mensagem que não continham texto foram removidas]





[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] FULL TABLE..

2009-09-15 Por tôpico Márcio Ricardo Alves da Silva
Oi Elis, segui a sua sugestão. e o custo diminuiu, caiu de 208456 para 2253.

Vou ver com os analistas se essa mudança atrapalha a regra de negócio.

Márcio.
  - Original Message - 
  From: Elis Azevedo Nery 
  To: oracle_br@yahoogrupos.com.br 
  Sent: Tuesday, September 15, 2009 8:33 AM
  Subject: Re: [oracle_br] FULL TABLE..


Olá Márcio!

  A cabeça do seu indice é ano, e me pareceu que você não está a passar o ano.
  Verifica se ao colocar este campo no where já usa o indice.

  Inté!
  Elis

  --- Em ter, 15/9/09, Márcio Ricardo Alves da Silva  
escreveu:

  De: Márcio Ricardo Alves da Silva 
  Assunto: [oracle_br] FULL TABLE..
  Para: oracle_br@yahoogrupos.com.br, gpora...@yahoogrupos.com.br
  Data: Terça-feira, 15 de Setembro de 2009, 12:19

   

  Bom dia!

  Tenho um select que está fazendo FULL TABLE, e a tabela que está fazendo FULL 
TABLE tem 50 milhões de registros, o select é esse:

  select ht01.un,

  ht01.periodo_ mov as dt_mov,

  sum(nvl(ht01. vr_ap, 0)) as vr_ap,

  sum(nvl(ht01. vr_av, 0)) as vr_av

  from ht01_hist_venda ht01

  where (:5 is null or ht01.un = :6)

  and ht01.periodo_ mov between :7 and :8

  and ht01.tipo = 4

  group by ht01.un

  ,ht01.periodo_ mov

  E tem esse indice criado na tabela.

  ANO, TIPO, PERIODO_MOV, UN, REGIONAL, REGIAO, EQUIPE. ROTA, CLIENTE, PROD

  Forcei o indice com o hint, e o custo dobrou. Onde tem a numeração, são as 
bind variables, acho que o problema é bind :5 is null.

  Alguém tem alguma dica?

  Grato.

  [As partes desta mensagem que não continham texto foram removidas]











  __
  Veja quais são os assuntos do momento no Yahoo! +Buscados
  http://br.maisbuscados.yahoo.com

  [As partes desta mensagem que não continham texto foram removidas]



  

[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] FULL TABLE..

2009-09-15 Por tôpico Elis Azevedo Nery
Olá Márcio!

A cabeça do seu indice é ano, e me pareceu que você não está a passar o ano.
Verifica se ao colocar este campo no where já usa o indice.

Inté!
Elis

--- Em ter, 15/9/09, Márcio Ricardo Alves da Silva  
escreveu:

De: Márcio Ricardo Alves da Silva 
Assunto: [oracle_br] FULL TABLE..
Para: oracle_br@yahoogrupos.com.br, gpora...@yahoogrupos.com.br
Data: Terça-feira, 15 de Setembro de 2009, 12:19






 





  Bom dia!



Tenho um select que está fazendo FULL TABLE, e a tabela que está fazendo FULL 
TABLE tem 50 milhões de registros, o select é esse:



select ht01.un,

  ht01.periodo_ mov as dt_mov,

  sum(nvl(ht01. vr_ap, 0)) as vr_ap,

  sum(nvl(ht01. vr_av, 0)) as vr_av

  from ht01_hist_venda ht01

where  (:5 is null or ht01.un = :6)

   andht01.periodo_ mov between :7 and :8

   andht01.tipo = 4

group  by ht01.un

 ,ht01.periodo_ mov



E tem esse indice criado na tabela.



ANO, TIPO, PERIODO_MOV, UN, REGIONAL, REGIAO, EQUIPE. ROTA, CLIENTE, PROD



Forcei o indice com o hint, e o custo dobrou. Onde tem a numeração, são as bind 
variables, acho que o problema é bind :5 is null.



Alguém tem alguma dica?



Grato.



[As partes desta mensagem que não continham texto foram removidas]




 

  




 

















  

Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] FULL TABLE..

2009-09-15 Por tôpico Márcio Ricardo Alves da Silva
Bom dia!

Tenho um select que está fazendo FULL TABLE, e a tabela que está fazendo FULL 
TABLE tem 50 milhões de registros, o select é esse:

select ht01.un,
  ht01.periodo_mov as dt_mov,
  sum(nvl(ht01.vr_ap, 0)) as vr_ap,
  sum(nvl(ht01.vr_av, 0)) as vr_av
  from ht01_hist_venda ht01
where  (:5 is null or ht01.un = :6)
   andht01.periodo_mov between :7 and :8
   andht01.tipo = 4
group  by ht01.un
 ,ht01.periodo_mov


E tem esse indice criado na tabela.

ANO, TIPO, PERIODO_MOV, UN, REGIONAL, REGIAO, EQUIPE. ROTA, CLIENTE, PROD

Forcei o indice com o hint, e o custo dobrou. Onde tem a numeração, são as bind 
variables, acho que o problema é bind :5 is null.

Alguém tem alguma dica?

Grato.

[As partes desta mensagem que não continham texto foram removidas]



RE: [oracle_br] Full table scans

2005-12-19 Por tôpico Claro, Eduardo
Não tem como você pedir para ele te avisar quando faz cada full table scan. O 
que dá pra fazer é verificar nas estatísticas do banco (V$SYSSTAT por exemplo) 
quantos FULL SCANS já foram realizados.

Mas, ainda que mal te pergunte, pra que você quer isso? Se você está partindo 
do pressuposto de que todo full scan é um erro, e por isso deve ser exterminado 
do banco, devo adiantar que isto está errado. O full table scan é uma opção de 
otimização plausível e esperada em várias situações, conforme já tem sido 
amplamente explicado pelos colegas aqui do grupo.

[]s

Eduardo Claro
EDS - Brazilian Solution Centre
+55 (11) 4393-1276
mailto: [EMAIL PROTECTED]

-Original Message-
From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
thy_costa
Sent: segunda-feira, 19 de dezembro de 2005 09:32
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Full table scans

Bom dia.
Tem como fazer algo no banco ou algum procedimento que me avise sempre
que o banco fizer um full table scan em determinada tabela?

Agradeço qualquer ajuda.
Thiago.




--
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




 




--
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

 




[oracle_br] Full table scans

2005-12-19 Por tôpico thy_costa
Bom dia.
Tem como fazer algo no banco ou algum procedimento que me avise sempre
que o banco fizer um full table scan em determinada tabela?

Agradeço qualquer ajuda.
Thiago.




--
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