Conceitualmente é simplíssimo , quando vc especifica FROM
TABELA PARTITION(NOMEDAPARTICAOX) WHERE CAMPOPARTICIONADO =
VALOR o CBO já "sabe" que apenas a partição NOMEDAPARTICAOX vai ser lida, e 
quando vc diz FROM
TABELA WHERE CAMPOPARTICIONADO = VALOR o CBO vai consultar os parâmetros 
optimizer_nn, as constraints, as estatísticas (da tabela, dos índices, das 
partições) e os Histogramas eventualmente presentes para deduzir se há uma 
partição única que já tem os dados todos necessários, se ele julgar que houver 
ele a usa.  
 As duas formas *** não *** deveriam dar diferença, em tudo o mais sendo igual 
no SQL, se vc está tendo diferença é uma indicação razoável que 
constraints/estatísticas/histogramas estão ausentes/incompletos/insuficientes 
(o Size do histograma, talvez), params não estão bem, algo do tipo, que TEM que 
ser encontrado e corrigido pelo seu DBA.

 []s

  Chiappa

--- Em oracle_br@yahoogrupos.com.br, Mauricio Lobão <mauricio.lo...@...> 
escreveu
>
> Pessoal,
> 
> Aqui no trabalho nós possuímos tabelas particionadas, devido ao grande volume 
> de dados, e constantemente geramos relatórios utilizando estas tabelas. 
> Recentemente tivemos muitos problemas de [b]ORA-01555: snapshot too old[/b] a 
> solução que encontramos foi explicitar o nome da partição no FROM, exemplo 
> FROM TABELA PARTITION(NOMEDAPARTICAO). Antes realizávamos a extração fazendo 
> a restrição no WHERE com o campo particionado, exemplo WHERE 
> CAMPOPARTICIONADO = VALOR.
> 
> Além de resolvermos o problema de [b]snapshot too old[/b], também notamos um 
> ganho significativo na execução das querys. Fica a pergunta..
> Alguem sabe qual a diferença conceitual entre essas duas formas ?
> 
> Utilizamos o Oracle 10g.
> 
> []'s
>


Responder a