在开发过程中,需要对mysql数据库进行多表级联查询,其中为了提高分页查询性能,用到了mysql中查询行号。
SELECT * FROM table ORDER BY id LIMIT 1000, 10;对于使用limit关键字实现mysql的分页查询十分方便,但当数据量增大时,使用limit关键字进行分页的效率就很不理想了(limit的分页效率与第一个参数有关,当数据量增大时,limit的第一个参数增大,分页效率不断降低)。
SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010; SELECT * FROM table WHERE id IN(10000, 100300, 1000020...);前一种是对于连续数据的分页处理,后者是对非连续数据的分页处理(先找出需要分页的id号)。
SELECT @rowno:=@rowno+1 as rowno,r.* from t_article r,(select @rowno:=0) t如果要对现有的sql增加行号的获取可以这样做:
SELECT @rowno:=@rowno+1 as rowno, O.* from (old_sql) O,(select @rowno:=0) told_sql是之前已有的sql,在上方sql中吧原有的sql看成了一张新的表
select P.* from (SELECT @rowno:=@rowno+1 as rowno, O.* from (old_sql) O,(select @rowno:=0) t) P where rowno between ? and ?需要注意的是,order by 等条件应该包含在old_sql中