1,分页语句
- m:页的长度,n:分页起始位置大小
第一种写法
select * from [table_name] limit m offset n;
第二种写法
select * from [table_name] limit n , m;
获取从第n个开始的m个记录。
select * from `order` limit 10
获取从第1个开始的m个记录
2,分页优化
直接使用limit函数进行分页,在数据小的情况下没什么问题,但数据量过大,则会显得很吃力。
下面以一张简单的订单表为例,做一次分页优化。
(1)建立合适的索引
- username建立索引
select * from `order` where username like '许%' limit 10000,5
(2)根据主键或者唯一索引再排序
SELECT * FROM `order` WHERE id > (pageNum*pageSize) ORDER BY id ASC LIMIT pageSize
(3)子查询方式(非常快)
SELECT * FROM `order` WHERE id >= (SELECT id FROM `order` ORDER BY id LIMIT pageNum*pageSize, 1) LIMIT pageSize
(4)join查询(测试有些慢,不建议,有些人测试很快)
SELECT * FROM `order` AS t1
JOIN (SELECT id as join_id FROM `order` ORDER BY id desc LIMIT pgeNum*pageSize, 1) AS t2
WHERE t1.id <= t2.join_id ORDER BY t1.id desc LIMIT pageSize
(5)利用MySQL支持ORDER操作可以利用索引快速定位部分元组,避免全表扫描
SELECT * FROM `order` WHERE id>=1000 ORDER BY id ASC LIMIT 0,20