mysql 修改分页_mysql分页优化方法

mysql分页优化方法

今天遇到开发反应分页语句很慢,马上看一下到底是啥的分页语句

原分页语句

SELECT * FROM `tt` LIMIT 4863000, 1000

执行这个语句需要6秒+时间

51502425f80e113d83a9336bc4444e32.png

执行计划为全表扫描

a8489f2c9c1a89dcdf0302c5c6590c0c.png

在网上看到叶金荣对分页优化的文章,于是把语句修改为inner join的方式

分页改为inner join的方式

http://imysql.com/2014/07/26/mysql-optimization-case-paging-optimize.shtml

修改后的语句

SELECT*FROM

`tt` t1

INNER JOIN

(SELECTidFROM

`tt`

LIMIT4863000, 1000) t2 USING (id)

06a348f624cc690dec410e1db3419e49.png

修改之后只用了1.6秒

执行计划

c8b64fbc40c1093ebb6abafc0dc3df23.png

修改之后的语句其实本质没有变还是扫描表得到4863000这个锚点之后的数据,但是仔细观察你会发现实际上子查询里面

只查询id这一列,因为表本身有一个最窄索引IND_RSYNCS,这个索引只有一个列RSYNCS,利用这个最窄索引扫描到4863000之后的ID值

id是主键,然后子表和主表做join,join条件是id,虽然本质没有变,但是相比改写前的语句大大节省了IO,所以查询速度有了质的提升

SELECT id FROM `tt` LIMIT 4863000, 1000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值