如果使用
select max(datetime) from (select * from tbl_1 order by datetime asc limit 50000) tmp;
然后
select * from tbl_1 where datetime<@dt order by datetime desc limit 10
union
select * from tbl_1 where datetime>@dt order by datetime asc limit 10;
存在结果集很大时,查询效率问题--第一次查询计划中,取max是通过中间结果集获取的,无索引可用,中间结果集越大,问题越突出。

解决方案 »

  1.   

    Select * From tbl_1 order by datetime desc limit 49990,21
      

  2.   


    你这不行的,如果这样也可以,我不用问了。你觉得逻辑和要求一样吗?datetime只是加入时间,不是加入次序,如果有加入次序,那也太简单了吧
      

  3.   

     如果datetime 都是唯一的,则 逻辑和要求一样如果楼主认为不一样,则请举例说明。 比如 “获取第5名加入用户 和他前后的2名用户”
    问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
        
      

  4.   

    datetime 字段添加索引,然后用1楼的语句
      

  5.   

    加入时间和加入顺序有什么矛盾的地方?除了排除同一时间加入多个人的情况,加入时间不就是加入顺序???!!!
    如果存在重复的加入时间,那么必然需要ID之类的字段来排序,你又不说这个排序依据是什么,还在责怪人家的逻辑......况且自己也是在用order by datetime