J'ai une question simple:
J'ai une postgresql
base de données: Scores(score integer)
.
Comment puis-je obtenir les 10 meilleurs scores le plus rapidement?
METTRE À JOUR:
Je ferai cette requête plusieurs fois et je vise la solution la plus rapide.
sql
postgresql
sql-limit
Joey Franklin
la source
la source
explain analyze
?Réponses:
Pour cela, vous pouvez utiliser la limite
Si la performance est importante (quand ne l'est-elle pas ;-) recherchez un index sur le score.
À partir de la version 8.4, vous pouvez également utiliser le standard ( SQL: 2008 )
fetch first
Comme l'a souligné @Raphvanns, cela vous donnera
first 10 rows
littéralement. Pour supprimer les valeurs en double, vous devez sélectionner desdistinct
lignes, par exempleSQL Fiddle
la source
fetch first X rows only
est la réponse que je cherchais - merci du futur lointain!Semble que vous recherchez
ORDER BY
dans l'DESC
ordre de fin avec la clause LIMIT :Bien sûr, cela
SELECT *
pourrait sérieusement affecter les performances, alors utilisez-le avec prudence.la source
Notez que s'il y a des liens dans les 10 premières valeurs, vous n'obtiendrez que les 10 premières lignes, pas les 10 premières valeurs avec les réponses fournies. Ex: si les 5 premières valeurs sont 10, 11, 12, 13, 14, 15 mais que vos données contiennent 10, 10, 11, 12, 13, 14, 15, vous n'obtiendrez que 10, 10, 11, 12, 13, 14 comme votre top 5 avec un
LIMIT
Voici une solution qui retournera plus de 10 lignes s'il y a des égalités mais vous obtiendrez toutes les lignes là où
some_value_column
est techniquement dans le top 10.la source
la source