Oracle query help

5 respostas
Deluxe

Pessoal
sou desenvolvedor java…
sei q não é um forum de oracle
mas como a comunidade sempre me ajudo, creio que vai me ajudar…

tenho um sistema que tem uma tabela com 400 mil registro, preciso fazer um SELECT que traga os 1000 maiores… sendo os 1000 maiores PK.
alguem pode me ajudar?

vlw

5 Respostas

Deluxe

conseguir

select *

from

( select *

from tabela

order by critério )

where ROWNUM <= :N;

tnks

B

Deluxe:
conseguir

select *

from

( select *

from tabela

order by critério )

where ROWNUM <= :N;

tnks


otimizado:

select *
 from tabela
 where ROWNUM <= :N
 order by critério
B

theBalrogg:

Bruno, ao que me consta, a cláusula ORDER BY só é resolvida após todas as outras cláusulas, principalmente a cláusula WHERE. O que quer dizer que primeiro ele vai pegar as N primeiras linhas para depois ordená-las. Dada a necessidade do nosso amigo, o SELECT que você passou pode ser otimizado, mas não vai dar a ele o resultado que ele precisa.

Isso depende na verdade. Pelo menos no Oracle, se a coluna que ele passar no order by for indexada, vai dar certo. Testei numa coluna sem index também, e realmente neste caso não dá certo.

theBalrog

Bruno Laturner:

otimizado:

select * from tabela where ROWNUM <= :N order by critério


Bruno, ao que me consta, a cláusula ORDER BY só é resolvida após todas as outras cláusulas, principalmente a cláusula WHERE. O que quer dizer que primeiro ele vai pegar as N primeiras linhas para depois ordená-las. Dada a necessidade do nosso amigo, o SELECT que você passou pode ser otimizado, mas não vai dar a ele o resultado que ele precisa.

theBalrog

Tem razão… Falei assumindo que não exista índice.

Criado 26 de maio de 2009
Ultima resposta 27 de mai. de 2009
Respostas 5
Participantes 3