• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql分页时offset过大的Sql优化实例分享

mysql分页时offset过大的Sql优化实例分享

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了offset,mysql,优化等相关知识,希望本文的分享对您有所帮助
当我们展示一个列表中的内容时,难免会遇到分页问题,因为列表中的内容数量可能很多,但是用户能一次看到的界面大小是有限的,不可能一个界面展示所有的内容,从后端一次性取太多的数据也会给后端造成额外的压力。mysql分页是我们在开发经常遇到的一个功能,最近在实现该功能的时候遇到一个问题,所以这篇文章主要给大家介绍了关于mysql分页时offset过大的Sql优化经验,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。

通常分页查询的时候会使用这样的语句:

SELECT
*
FROM table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000

当offset特别大时,这条语句的执行效率会明显减低,而且效率是随着offset的增大而降低的。

原因为:

MySQL并不是跳过offset行,而是取offset+N行,然后返回放弃前offset行,返回N行,当offset特别大,然后单条数据也很大的时候,每次查询需要获取的数据就越多,自然就会很慢。

优化方案:


SELECT
*
FROM table
JOIN
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000)
as tmp using(id)

或者


SELECT a.* FROM table a, 
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000) b 
where a.id = b.id

先获取主键列表,再通过主键查询目标数据,即使offset很大,也是获取了很多的主键,而不是所有的字段数据,相对而言效率会提升很多。

相关推荐:

MySQL优化总结-查询总条数

常用mysql优化sql语句查询方法汇总

MySQL优化包括的三个方面

以上就是mysql分页时offset过大的Sql优化实例分享的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 优化mysql的limit offset的例子
  • 详解在mysql查询时,offset过大影响性能的原因与优化方法
  • mysql分页时offset过大的Sql优化实例分享

相关文章

  • 2018-12-05mysql 优化(5)索引与排序
  • 2018-12-05关于连续签到的文章推荐8篇
  • 2018-12-05MySQL安装之编码设置的图文详解
  • 2017-05-11FROM_UNIXTIME 格式化MYSQL时间戳函数
  • 2018-12-05详解MySQL根(Root)密码在Linux(CentOS)下如何重置(图文)
  • 2017-05-11利用SQL注入漏洞登录后台的实现方法
  • 2018-12-05全文本检索的应用(3)
  • 2017-05-11基于MySQL Master Slave同步配置的操作详解
  • 2018-12-05select语句逻辑执行顺序 你知道吗
  • 2018-12-05介绍mysql中视图的概念及操作

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL 找出包含非ASCII字符值的记录
    • MySQL之-GTIDs Replication模式下切换Master服务器或中继服务器方法详解
    • MySQL Cluster集群探索与实践
    • sqlserver-为什么我这个用left join ,join, right join效果相同?
    • 详解MySql插入数据成功但是报[Err] 1055错误如何解决
    • 数据库存储过程分页显示
    • php MySQL Create Database 创建数据库
    • ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
    • MySQL优化之如何查找SQL效率低的原因
    • 将mysql转换到oracle必须了解的50件事

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有