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 >