初学mysql,语法尚不熟悉,写分页查询时,按照SqlServer的语法写了ROW_NUMBER() OVER (),然后不出意外的报错了。经查,原来mysql不支持这种用法,于是本人开始了mysql分页查询语法大搜素,特此记录,备忘。
limit方法在数据量少的时候性能还不错,当数据量过大,性能耗损严重,也就必须进行优化。下边的优化办法,只适用于主键id自增的情况,就是根据id的大小来区分数据范围并实现顺序或降序的分页查询。
这是顺序排序分页查询方法:
-- 第一页
select * from t_content
where id>=(select id from t_content order by add_time limit 1)
order by add_time limit 10;
-- 第二页
select * from t_content
where id>=(select id from t_content order by add_time limit 10,1)
order by add_time limit 10;
-- 第三页
select * from t_content
where id>=(select id from t_content order by add_time limit 20,1)
order by add_time limit 10;
这是倒叙排序分页查询方法:
-- 第一页
select * from t_content
where id<=(select id from t_content order by add_time desc limit 1)
order by add_time desc limit 10;
-- 第二页
select * from t_content
where id<=(select id from t_content order by add_time desc limit 10,1)
order by add_time desc limit 10;
-- 第三页
select * from t_content
where id<=(select id from t_content order by add_time desc limit 20,1)
order by add_time desc limit 10;
注:查询子句里的字段必须是有索引的字段,这样才能根据索引快速查出目标数据再进行多条数据查询,如果不是索引,查询性能依然无法得到改善。