Mam proste pytanie:
Mam postgresql
bazę danych: Scores(score integer)
.
Jak uzyskać najwyższe 10 punktów najszybciej?
AKTUALIZACJA:
Zrobię to zapytanie wiele razy i dążę do najszybszego rozwiązania.
sql
postgresql
sql-limit
Joey Franklin
źródło
źródło
explain analyze
?Odpowiedzi:
Do tego możesz użyć limitu
Jeśli wydajność jest ważna (kiedy nie jest ;-) poszukaj indeksu wyniku.
Począwszy od wersji 8.4, możesz także używać standardu ( SQL: 2008 )
fetch first
Jak wskazał @Raphvanns, da ci to
first 10 rows
dosłownie. Aby usunąć zduplikowane wartości, musisz wybraćdistinct
wiersze, npSQL Fiddle
źródło
fetch first X rows only
to odpowiedź, której szukałem - dziękuję z dalekiej przyszłości!Wygląda na to, że szukasz
ORDER BY
wDESC
końcowej kolejności z klauzulą LIMIT :Oczywiście
SELECT *
może to poważnie wpłynąć na wydajność, więc używaj go ostrożnie.źródło
Zauważ, że jeśli w najlepszych 10 wartościach są remisy, otrzymasz tylko 10 najlepszych wierszy, a nie 10 najlepszych wartości z podanymi odpowiedziami. Np .: jeśli 5 najlepszych wartości to 10, 11, 12, 13, 14, 15, ale twoje dane zawierają 10, 10, 11, 12, 13, 14, 15, otrzymasz tylko 10, 10, 11, 12, 13, 14 jako twoja pierwsza piątka z
LIMIT
Oto rozwiązanie, które zwróci więcej niż 10 rzędów, jeśli są remisy, ale dostaniesz wszystkie wiersze, które
some_value_column
technicznie znajdują się w pierwszej dziesiątce.źródło
źródło