Eu tenho uma pergunta simples:
Eu tenho um postgresql
banco de dados: Scores(score integer)
.
Como obter as 10 pontuações mais altas mais rapidamente?
ATUALIZAR:
Farei essa consulta várias vezes e estou buscando a solução mais rápida.
sql
postgresql
sql-limit
Joey Franklin
fonte
fonte
explain analyze
?Respostas:
Para isso você pode usar limite
Se o desempenho é importante (quando não é ;-) procure um índice na pontuação.
A partir da versão 8.4, você também pode usar o padrão ( SQL: 2008 )
fetch first
Como @Raphvanns apontou, isso lhe dará
first 10 rows
literalmente. Para remover valores duplicados, você deve selecionardistinct
linhas, por exemploSQL Fiddle
fonte
fetch first X rows only
é a resposta que eu estava procurando - obrigado de um futuro distante!Parece que você está procurando
ORDER BY
emDESC
ordem final com a cláusula LIMIT :É claro que isso
SELECT *
pode afetar seriamente o desempenho, portanto, use-o com cautela.fonte
Nota que, se há laços em top 10 valores, você só vai conseguir o top 10 linhas, e não os 10 principais valores com as respostas dadas. Ex: se os 5 principais valores forem 10, 11, 12, 13, 14, 15, mas seus dados contiverem 10, 10, 11, 12, 13, 14, 15, você receberá apenas 10, 10, 11, 12, 13, 14 como seu top 5 com um
LIMIT
Aqui está uma solução que retornará mais de 10 linhas se houver empate, mas você obterá todas as linhas onde
some_value_column
está tecnicamente entre as 10 principais.fonte
fonte