LINUX.ORG.RU

История изменений

Исправление grondek, (текущая версия) :

Я чуток ошибся, там еще окно указать надо

SELECT id, position FROM 
  (SELECT id, score, row_number() OVER (ORDER BY score DESC) AS "position" FROM users) AS "source" 
  LEFT JOIN friends WHERE ( friends.user_id = source.id ) 
WHERE friends.user_id = <me> ORDER BY source.score LIMIT 5;

Это очень быстро. Я у себя на боевой базе попробовал по табличке с 600000 записей с выводить top-5 по дате. Выполняется всего десятки миллисекунд

Это при том, что база развернута на моей не очень быстрой рабочей машине, а не на нормальной серверной тачке.

Исходная версия grondek, :

Я чуток ошибся, там еще окно указать надо

SELECT id, position FROM 
  (SELECT id, score, row_number() OVER (ORDER BY score DESC) AS "position" FROM users) AS "source" 
  LEFT JOIN friends WHERE ( friends.user_id = source.id ) 
WHERE friends.user_id = <me> ORDER BY source.score LIMIT 5;

Это очень быстро. Я у себя на боевой базе попробовал по табличке с 600000 записей с выводить top-5 по дате. Выполняется всего десятки миллисекунд