Basit bir sorum var:
Bir var postgresqlbir veritabanı: Scores(score integer).
En yüksek 10 puanı en hızlı nasıl alabilirim?
GÜNCELLEME:
Bu sorguyu birden çok kez yapacağım ve en hızlı çözümü hedefliyorum.
Basit bir sorum var:
Bir var postgresqlbir veritabanı: Scores(score integer).
En yüksek 10 puanı en hızlı nasıl alabilirim?
GÜNCELLEME:
Bu sorguyu birden çok kez yapacağım ve en hızlı çözümü hedefliyorum.
Yanıtlar:
Bunun için limit kullanabilirsiniz
select *
from scores
order by score desc
limit 10
Performans önemliyse (ne zaman değildir ;-) puan üzerinde bir dizin arayın.
8.4 sürümünden başlayarak standardı da kullanabilirsiniz ( SQL: 2008 )fetch first
select *
from scores
order by score desc
fetch first 10 rows only
@ Raphvanns'ın işaret ettiği gibi, bu size first 10 rowstam anlamıyla verecektir . Yinelenen değerleri kaldırmak için distinctsatır seçmeniz gerekir ; ör.
select distinct *
from scores
order by score desc
fetch first 10 rows only
fetch first X rows onlyaradığım cevap - uzak gelecekten teşekkür ederim!
Aradığınız görünüyor ORDER BYiçinde DESColan düzeni biten SINIR maddesi:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Elbette SELECT *performansı ciddi şekilde etkileyebilir, bu yüzden dikkatli kullanın.
Not ilk 10 değerlerinde bağlar varsa, sadece en iyi 10 satır değil, ilk 10 alacak değerlerini sağlanan cevapları ile. Örneğin: ilk 5 değer 10, 11, 12, 13, 14, 15 ise ancak verileriniz 10, 10, 11, 12, 13, 14, 15 içeriyorsa, yalnızca 10, 10, 11, 12, 13, 14 ile ilk 5LIMIT
Bağlar varsa 10'dan fazla satır döndürecek bir çözüm var ama some_value_columnteknik olarak ilk 10'da yer alan tüm satırları alacaksınız .
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
explain analyze?