1.limit分页公式

1.1 limit分页公式

1.limit分页公式:curPage是当前第几页
上一页:limit (curPage-1)*pageSize,pageSize
下一页:limit (curPage+1)*pageSize,pageSize

2.sql

select * from student order by sid limit (curPage-1)*pageSize,pageSize

1.2 获取总页码

1.总页数公式:totalRecord是总记录数;pageSize是一页分多少条记录
int totalPageNum = (totalRecord +pageSize - 1) / pageSize;
2.用途:前台UI分页插件显示分页码
3.询总条数:totalRecord是总记录数: SELECT COUNT(*) FROM student

2. 分页方式

2.1 limit m,n分页

limit 3,3的意思扫描满足条件的3+3行,撇去前面的3行,返回最后的3行,那么问题来了,如果是limit 200000,200,需要扫描200200行,如果在一个高并发的应用里,每次查询需要扫描超过20W行,效率十分低下。

import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test')# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)def view_page():current_page_no = 0init_status = Nonewhile True:result = []status = input("请翻页(1:上一页,2:下一页):")if int(status)==1:if current_page_no>0:print(f"当前页是第{current_page_no}页, 您选择了上一页")else:page = current_page_no+1print(f"当前页是第{page}页, 您选择了上一页")if init_status==None:passelif not init_status:current_page_no = current_page_no -1;else:passif current_page_no - 1>0:current_page_no = current_page_no - 1cursor.execute("select * from student order by sid limit %s,10", (current_page_no*10))result = cursor.fetchall()else:current_page_no = 0cursor.execute("select * from student order by sid limit %s,10",(current_page_no))result = cursor.fetchall()init_status = Trueelif int(status)==2:if current_page_no>0:print(f"当前页是第{current_page_no}页, 您选择了下一页")else:page = current_page_no+1print(f"当前页是第{page}页, 您选择了下一页")if init_status==None:passelif init_status:current_page_no = current_page_no + 1else:passcursor.execute("select * from student order by sid limit %s,10", (current_page_no*10))result = cursor.fetchall()current_page_no = current_page_no + 1;init_status = Falseelse:print("请输入正确的代码。")for info in result:print(info)
view_page()

2.2 limit m

//下一页
select * from student where sid >10 order by sid asc limit 10
//上一页
select * from student where sid <60 order by sid desc limit 10

这种方式不管翻多少页只需要扫描n条数据。

但是,虽然扫描的数据量少了,但是在某些需要跳转到多少也得时候就无法实现,这时还是需要用到方法1,既然不能避免,那么我们可以考虑尽量减小m的值,因此我们可以给这条语句加上一个条件限制。使得每次扫描不用从第一条开始。这样就能尽量减少扫描的数据量。

2.3

例如:每页10条数据,当前是第10页,当前条目ID的最大值是109,最小值是100.(当前100-109)

跳到第9页:

select * from student where sid<100 order by sid desc limit 0,10

跳到第8页:

select * from student where sid<100 order by sid desc limit 10,10

跳到第6页:

select * from student where sid<100 order by sid desc limit 30,10

跳到第11页:

select * from student where sid<109 order by sid asc limit 0,10

3. 优化

3.1 使用子查询优化

这种方式先定位偏移位置的 id,然后往后查询,这种方式适用于 id 递增的情况。

//0.0037
select * from student where sname="理解" limit 5000,1//0.0025
select sid from student where sname="理解" limit 5000,1//0.0021
SELECT*
FROMstudent
WHEREsname = "理解" AND sid >=(SELECTsidFROMstudentWHEREsname = "理解"LIMIT 5000,1
)
LIMIT 100;//0.0030
select * from student where sname="理解" limit 5000,100

1>比较第1条语句和第2条语句:使用 select id 代替 select * 速度增加了3倍
2>比较第2条语句和第3条语句:速度相差几十毫秒
3>比较第3条语句和第4条语句:得益于 select id 速度增加,第3条语句查询速度增加了3倍

3.2 使用 id 限定优化

这种方式假设数据表的id是连续递增的,则我们根据查询的页数和查询的记录数可以算出查询的id的范围,可以使用 id between and 来查询:’

select * from student where sname="理解"
and sid between 1000000 and 1000100 limit 100;

这种查询方式能够极大地优化查询速度,基本能够在几十毫秒之内完成。限制是只能使用于明确知道id的情况,不过一般建立表的时候,都会添加基本的id字段,这为分页查询带来很多便利。

还可以有另外一种写法:

select * from student where sid >= 1000001 limit 100;

当然还可以使用 in 的方式来进行查询,这种方式经常用在多表关联的时候进行查询,使用其他表查询的id集合,来进行查询:

select * from student where id in
(select student_id from class where class_id=1)
limit 100;

3.3 使用临时表优化

这种方式已经不属于查询优化,这儿附带提一下。

对于使用 id 限定优化中的问题,需要 id 是连续递增的,但是在一些场景下,比如使用历史表的时候,或者出现过数据缺失问题时,可以考虑使用临时存储的表来记录分页的id,使用分页的id来进行 in 查询。这样能够极大的提高传统的分页查询速度,尤其是数据量上千万的时候。

3.4 关于数据表的id说明

一般情况下,在数据库中建立表的时候,强制为每一张表添加 id 递增字段,这样方便查询。

如果像是订单库等数据量非常庞大,一般会进行分库分表。这个时候不建议使用数据库的 id 作为唯一标识,而应该使用分布式的高并发唯一 id 生成器来生成,并在数据表中使用另外的字段来存储这个唯一标识。

使用先使用范围查询定位 id (或者索引),然后再使用索引进行定位数据,能够提高好几倍查询速度。即先 select id,然后再 select *;

https://blog.csdn.net/bandaoyu/article/details/89844673

mysql实现翻页功能相关推荐

  1. 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载

    用 Python selenium爬取实时股票新闻并存入mysql数据库中 1.分析需求 2.创建表 3.分析需要爬取的网页内容 4.python里面selenium进行爬虫操作 1.添加包 2.连接 ...

  2. springboot:实现分页查询,以及翻页功能

    在pom.xml中引入依赖 <!-- 分页查询插件 --><dependency><groupId>com.github.pagehelper</groupI ...

  3. jmeter实现翻页功能_JMeter定制功能实现

    jmeter实现翻页功能 JMeter提供了可在采样器中使用的功能. 在编写复杂的测试计划时,您会觉得JMeter缺少某些方法. 您使用Beanshell脚本定义自己的自定义方法. JMeter调用B ...

  4. jsp实现上一页下一页翻页功能

    前段时间一直忙于期末考试和找实习,好久没写博客了. 这段时间做了个小项目,包含了翻页和富文本编辑器Ueditor的两个知识点,Ueditor玩的还不是很深,打算玩深后再写篇博客. 要实现翻页功能,只需 ...

  5. 利用jquery写的从后台获取json数据以表格显示,并带翻页功能.里面包含模式窗口等功能...

    利用jquery写的从后台获取json数据,以表格显示,并带翻页功能 里面包含模式窗口等功能 大家看例子就懂了 下面是效果图: http://www.jm47.com/project/3001.asp ...

  6. django自带模块实现翻页功能

    djago自带模块实现翻页功能(前后端分离写法) 文章目录 djago自带模块实现翻页功能(前后端分离写法) 一.Page的解释 二.异常处理 三.代码 django中自带了具有翻页功能的库Pagin ...

  7. qtablewidget翻页禁止_PyQt—QTableWidget实现翻页功能

    主要使用QTableWidget中的三个函数实现: verticalScrollBar().setSliderPosition() 设置当前滑动条的位置 verticalScrollBar().max ...

  8. 用Javascript实现Blogger/Blogspot的传统模板翻页功能

    Blogger的API很好很强大,今天,搞定了翻页功能,翻墙找到一个原始的脚本文件blogger_pager_script_v10.js,不过已经不好用了,于是改了一下,现在终于好用了. 基本功能: ...

  9. [python爬虫] bilibili视频评论翻页功能

    bilibili视频评论翻页逻辑 翻页功能 (Android App抓包 不是web端 但原理都适用) 设 1. 总评论数y 2. 第几页(当前爬到第几页)z 利用 z小于等于y就会有数据的逻辑 一页 ...

最新文章

  1. Docker 容器技术 — Overview
  2. 用 python 实现一个多线程网页下载器
  3. Flex Basis与Width的区别
  4. 手机User-Agent大全(Android爬虫)
  5. shell脚本:实现文件覆盖写入、文件内容追加写入
  6. 全局路径规划:图搜索算法介绍1(BFS/DFS)
  7. catti二级笔译综合能力真题_CATTI 二级口笔译教材、真题和模拟试题汇总!
  8. C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
  9. Python的主要功能是什么?
  10. CUDA C编程权威指南 第一章
  11. linux m530显卡,M530显卡和MX150哪个好(AMD Radeon M530)
  12. 最新Axure谷歌浏览器Chrome扩展程序安装方法
  13. 移动设备数据丢失恢复有办法
  14. 怎样两台计算机共用一台打印机,多台电脑如何共享一台打印机(图文讲解)
  15. 英特尔第十代处理器为什么不支持win7_10代cpu能不能装win7?10代cpu装win7全面分析(支持十代...
  16. 密码学技术如何选型?终探量子计算通信的安全模型
  17. 【全球品牌】圣经中人物的名字有哪些?
  18. Linux操作系统下复现github上的项目(一):下载项目、配置环境
  19. Angular Material 学习笔记 Chips
  20. 使用wireshark对grpc的helloworld抓包分析

热门文章

  1. eviews做回归分析时输出值的理解
  2. amh搭建php网站,AMH6.0发布 (免费版本) – AMH终于可以免费用了。
  3. 特征点检测效果评估(matlab代码)
  4. 关于glew.h / glut.h引用
  5. 8583报文格式介绍
  6. 01基础-算法第四版红黑树-红黑树-数据结构和算法(Java)
  7. 【设计模式】简单工厂模式+工厂方法模式+抽象工厂模式
  8. 回忆--上海滩奋斗的日子
  9. 使用opencv将16位深度图转灰度图
  10. 最让男人受不了的40种极品女人!