MySQL分页优化?用这一招,实用又简单

我们在做一些数量级不是爆大的分页场景时,一般都会去使用LIMIT加offfset的方式来实现。一般还会再加个order by来做个排序。

上面的做法再配合索引,性能一般会不差。

但这种分页的方式有个很恼火的问题,就是偏移量越大,越到后面就会越慢。

即使是elastic search也有这样的问题。

这个问题的核心其实就是offset(偏移量)。当偏移量越大时,mysql会扫描大量的行,然后抛弃掉。

所以就会很慢。

一个非常简单又实用的方法就是,你可以通过记录绝对位置的方式,把这个避免掉。

就像你看书一样,上一次看到哪里你会夹个书签,下次看的时候直接就翻到了。

数据库我们也可以这样,比如我们可以根据 更新时间排倒序,然后每次分页查询都会记录最后的时间,然后下一页就从这个时间点开始,取一页就是了。

SELECT * FROM tb_crm WHERE updated_at<#{上一页的最后一条的updated_at}

ORDER BY updated_at DESC LIMIT 20;

通过这种书签配合limit的方式就可以避免offset

这样的话,无论翻页到多么的后面,性能都不差。

如果觉得不错就点个赞,甚至直接分享都可以。

原文发布于微信公众号 - ImportSource(importsource)

原文发表时间:2018-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

Oracle数据库的初始化与跟踪学习方法

编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友...

40590
来自专栏Jerry的SAP技术分享

ABAP Netweaver和Cloud Foundry上的环境变量Environment Variable

22020
来自专栏数据和云

返璞归真:获取Oracle初始化参数设定的N种方法

? 杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主 参数文件是Or...

27970
来自专栏乐沙弥的世界

只读表空间的备份与恢复

--====================== --  只读表空间的备份与恢复 --====================== 一、只读表空间的特性...

10320
来自专栏沃趣科技

删用户删表空间的操作还能flashback回来吗?

有一次在某微信群里,有人提问以下两条操作还能恢复吗?而且是在没有开归档。紧接着又有人提问数据库是否开了闪回?

19420
来自专栏CSDN技术头条

MySQL 5.7 X Plugin:流水线技术vs.并行查询技术

本文将以MySQL 5.7 X Plugin为例,对比分析流水线(pipelining)和并行查询技术。 另一篇博文《MySQL 5.7 X Plugin支持异...

43760
来自专栏Hadoop实操

如何使用StreamSets实现Oracle中变化数据实时写入Kudu

1.1K50
来自专栏乐沙弥的世界

MySQL read_log_event(): 'Found invalid event in binary log'

    MySQL以简单易用著称,在同一个服务器上可以安装N个不同的版本,方便测试,迁移等等。此外,对于大多数Linux系统,集成了mysql,缺省会被安装。因...

9920
来自专栏乐沙弥的世界

使用pt-table-checksum校验MySQL主从复制

pt-table-checksum是一个基于MySQL数据库主从架构在线数据一致性校验工具。其工作原理在主库上运行, 通过对同步的表在主从段执行checksum...

26520
来自专栏张戈的专栏

MySQL在线DDL修改表结构的简单经验分享

摘 要 在线DDL修改生产环境的大表一直是运维、DBA一个很头痛的问题,本文分享一些相关经验,希望对还在头痛的同学能有所帮助,当然更希望路过的大神,如果有更靠...

39770

扫码关注云+社区

领取腾讯云代金券