一般分页
在系统中需要进行分页操作时,我们通常会使用 LIMIT 加上偏移量的方式实现,语法格式如下。
SELECT … FROM … WHERE … ORDER BY … LIMIT …
在有对应索引的情况下,这种方式一般效率还不错。但它存在一个让人头疼的问题,在偏移量非常大的时候,也就是翻页到很靠后的页面时,查询速度会变得越来越慢。
我们来演示一下。
先创建一个订单表 t_order。
CREATE TABLE t_order
(
id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘自增主键’,
order_no
varchar(32) NOT NULL COMMENT ‘订单号’,
user_id
varchar(20) NOT NULL COMMENT ‘用户ID’,
amount
decimal(18,2) NOT NULL COMMENT ‘订单金额’,
order_status
tinyint(4) NOT NULL COMMENT ‘订单状态:0新建 1处理中 2成功 3失败’,
create_time
datetime NOT NULL COMMENT ‘创建时间’,
PRIMARY KEY (id
),
UNIQUE KEY uniq_order_no
(order_no
) USING BTREE COMMENT ‘订单号唯一索引’
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
往表中插入1100w 条数据。( t1 是一个有100条数据的表,这里我利用笛卡尔乘积的方式