使用MySQL进行千万级别数据查询的技巧

本文探讨了在MySQL中使用LIMIT和OFFSET进行分页查询时遇到的性能问题,特别是当OFFSET值增大导致查询速度显著下降。提出了四种优化策略:1) 记录位置,避免使用OFFSET;2) 计算边界值,转换为已知位置的查询;3) 使用索引覆盖+子查询优化;4) 使用索引覆盖+连接查询优化。通过这些方法,可以显著提高大数据量下的查询效率。
摘要由CSDN通过智能技术生成

一般分页

在系统中需要进行分页操作时,我们通常会使用 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条数据的表,这里我利用笛卡尔乘积的方式

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值