全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解MySQL的limit用法和分页查询语句的性能分析

limit用法

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 

为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:

mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. 

如果只给定一个参数,它表示返回最大的记录行数目:

mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 

换句话说,LIMIT n 等价于 LIMIT 0,n

Mysql的分页查询语句的性能分析

MySql分页sql语句,如果和MSSQL的TOP语法相比,那么MySQL的LIMIT语法要显得优雅了许多。使用它来分页是再自然不过的事情了。

最基本的分页方式:

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引:举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好:

复制代码 代码如下:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10

子查询的分页方式:

随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

复制代码 代码如下:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢

此时,我们可以通过子查询的方式来提高分页效率,大致如下:

SELECT * FROM articles WHERE id >= 
(SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10 

JOIN分页方式

SELECT * FROM `content` AS t1 
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2 
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize; 

经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。 explain SQL语句:

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 1 
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where
2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。

实际可以利用类似策略模式的方式去处理分页,比如判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# mysql  # limit分页用法  # limit分页优化  # limit分页  # mysql优化limit查询语句的5个方法  # Mysql子查询IN中使用LIMIT应用示例  # mysql limit查询优化分析  # Mysql Limit 分页查询优化详解  # MySQL对limit查询语句的优化方法  # Mysql优化技巧之Limit查询的优化分析  # MySQL数据库之union  # limit和子查询详解  # MySQL数据查询limit子句用法举例  # 分页  # 偏移量  # 也会  # 第一个  # 第二个  # 是一个  # 就会  # 是在  # 子句  # 举例来说  # 我们可以  # 用了  # 得多  # 更有  # 比较好  # 这样一个  # 这个时候  # 要比  # 越大  # 一言 


相关文章: Android自定义listview布局实现上拉加载下拉刷新功能  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何选购建站域名与空间?自助平台全解析  SQL查询语句优化的实用方法总结  建站主机服务器选购指南:轻量应用与VPS配置解析  无锡营销型网站制作公司,无锡网选车牌流程?  股票网站制作软件,网上股票怎么开户?  如何在Windows环境下新建FTP站点并设置权限?  临沂网站制作公司有哪些,临沂第四中学官网?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  建站之星伪静态规则如何正确配置?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何在云主机上快速搭建网站?  建站主机如何安装配置?新手必看操作指南  如何通过VPS搭建网站快速盈利?  如何在云主机快速搭建网站站点?  如何在万网开始建站?分步指南解析  如何快速重置建站主机并恢复默认配置?  css网站制作参考文献有哪些,易聊怎么注册?  小型网站制作HTML,*游戏网站怎么搭建?  图册素材网站设计制作软件,图册的导出方式有几种?  教学网站制作软件,学习*后期制作的网站有哪些?  如何通过多用户协作模板快速搭建高效企业网站?  建站之星2.7模板:企业网站建设与h5定制设计专题  如何快速搭建虚拟主机网站?新手必看指南  微信小程序 input输入框控件详解及实例(多种示例)  如何解决ASP生成WAP建站中文乱码问题?  Android使用GridView实现日历的简单功能  临沂网站制作企业,临沂第三中学官方网站?  建站之星价格显示格式升级,你的预算足够吗?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  建站之星会员如何解锁更多建站功能?  如何通过云梦建站系统实现SEO快速优化?  如何破解联通资金短缺导致的基站建设难题?  如何在IIS中新建站点并配置端口与IP地址?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何高效配置香港服务器实现快速建站?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  家具网站制作软件,家具厂怎么跑业务?  开封网站制作公司,网络用语开封是什么意思?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Java解压缩zip - 解压缩多个文件或文件夹实例  如何在IIS服务器上快速部署高效网站?  如何在七牛云存储上搭建网站并设置自定义域名?  MySQL查询结果复制到新表的方法(更新、插入)  ppt制作免费网站有哪些,ppt模板免费下载网站?  建站org新手必看:2024最新搭建流程与模板选择技巧  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。