前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql中limit的用法

Mysql中limit的用法

作者头像
呼延十
发布2019-06-26 17:21:45
10.5K0
发布2019-06-26 17:21:45
举报
文章被收录于专栏:呼延呼延

目录

前言

日常开发中,我们使用mysql来实现分页功能的时候,总是会用到mysql的limit语法.而怎么使用却很有讲究的,今天来总结一下.

limit语法

limit语法支持两个参数,offsetlimit,前者表示偏移量,后者表示取前limit条数据.

例如:

代码语言:javascript
复制
## 返回符合条件的前10条语句 
select * from user limit 10

## 返回符合条件的第11-20条数据
select * from user limit 10,20

从上面也可以看出来,limit n 等价于limit 0,n.

性能分析

实际使用中我们会发现,在分页的后面一些页,加载会变慢,也就是说:

select * from user limit 1000000,10 语句执行较慢.那么我们首先来测试一下.

首先是在offset较小的情况下拿100条数据.(数据总量为200左右).然后逐渐增大offset.

代码语言:javascript
复制
select * from user limit 0,100 ---------耗时0.03s
select * from user limit 10000,100 ---------耗时0.05s
select * from user limit 100000,100 ---------耗时0.13s
select * from user limit 500000,100 ---------耗时0.23s
select * from user limit 1000000,100 ---------耗时0.50s
select * from user limit 1800000,100 ---------耗时0.98s

可以看到随着offset的增大,性能越来越差.

这是为什么呢?因为limit 10000,10的语法实际上是mysql查找到前10010条数据,之后丢弃前面的10000行,这个步骤其实是浪费掉的.

优化

用id优化

先找到上次分页的最大ID,然后利用id上的索引来查询,类似于select * from user where id>1000000 limit 100.

这样的效率非常快,因为主键上是有索引的,但是这样有个缺点,就是ID必须是连续的,并且查询不能有where语句,因为where语句会造成过滤数据.

用覆盖索引优化

mysql的查询完全命中索引的时候,称为覆盖索引,是非常快的,因为查询只需要在索引上进行查找,之后可以直接返回,而不用再回数据表拿数据.因此我们可以先查出索引的ID,然后根据Id拿数据.

代码语言:javascript
复制
select * from (select id from job limit 1000000,100) a left join job b on a.id = b.id;

耗时0.2秒.

总结

用mysql做大量数据的分页确实是有难度,但是也有一些方法可以进行优化,需要结合业务场景多进行测试.

当用户翻到10000页的时候,不如我们直接返回空好了,这么无聊的吗…

完。

ChangeLog

2019-05-25 完成 以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客——>呼延十

var gitment = new Gitment({ id: 'Mysql中limit的用法', // 可选。默认为 location.href owner: 'hublanker', repo: 'blog', oauth: { client_id: '2297651c181f632a31db', client_secret: 'a62f60d8da404586acc965a2ba6a6da9f053703b', }, }) gitment.render('container')



本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 前言
  • limit语法
  • 性能分析
  • 优化
    • 用id优化
      • 用覆盖索引优化
      • 总结
        • ChangeLog
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档