Sql 因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此ais应该是第一位,而不是c SELECT * FROM ( SELECT login, permissions FROM User WHERE l

Sql 因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此ais应该是第一位,而不是c SELECT * FROM ( SELECT login, permissions FROM User WHERE l,sql,orientdb,Sql,Orientdb,因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此ais应该是第一位,而不是c SELECT * FROM ( SELECT login, permissions FROM User WHERE login < ? ORDER BY DESC login LIMIT ? ) ORDER BY login SELECT login, permissions FROM User WHERE login >

因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此
a
is应该是第一位,而不是
c
SELECT * FROM ( 
    SELECT login, permissions FROM User 
    WHERE login < ? 
    ORDER BY DESC login 
    LIMIT ? 
) ORDER BY login
SELECT login, permissions FROM User 
WHERE login >= ? 
ORDER BY login 
LIMIT ?
1. a
2. b
3. c
4. d

get(key = 'a', limit = 2) would return a, b
get(key = 'c', limit = 2) would return a, b
get(key = 'd', limit = 2) would return b, c
get(key = 'd', limit = 3) would return a, b, c
select * 
from table 
where login < ? 
order by login DESC
limit n

UNION ALL

select * 
from table 
where login >= ? 
order by login 
limit n             -- worst case scenerio all n logins are equal or beyound ?
SELECT *
FROM ( ... ) as union_query
ORDER BY login
limit n
key rn a -1 b -2 c -3 d +4 e +5 key rn c -3 b -2 a -1 d +4 e +5
select login, permissions
from
(
  select 
    login, 
    permissions, 
    case when login < :value then
      -row_number() over (order by login)
    else
      row_number() over (order by login)
    end as rn
  from user
)
order by rn
fetch first :n rows only;