Mysql DB2等数据库分页的实现
一、Mysql的分页
(一)、MySQL分页的实现,使用关键字:Limit
语法:select * from tableName Limit A,B;
注释:tableName:表名
A:查询的起始点(如果A不写的话,默认从0开始)==》(当前页码*页面容量-1 )
B:获得数据的条数(即每页显示的条数)===》页面容量
注意:唯一需要注意的问题就是确保使用了索引
例子:
SQL查询: 从表第二条记录开始,获取两条记录
SELECT * FROM edi_test_task order by update_dt desc Limit 2,2;
(二)、查询原理:
Limit A,B的意思是: 扫描满足条件的A+B行后,扔掉前面的A行,返回需要的B行结果。
如:limit 2,2; 扫描4行后,扔掉前面的2行,返回后面的2行;
注:对于数据量不大的时候,这样简单的写法是可以的。但是当大数据的时候,就会影响性能。
如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。
(三)、大数据量 提高分页效率的方法
1、对于是可以比较的主键(索引)字段可用这种方法:
SELECT * FROM table WHERE id BETWEEN (currentPage-1)*pageSzie AND currentPage*pageSzie;
或者:select id,title from collect where id>=(select id from collect order by id limit 90000,1) limit 10; :90000:获得起点的位置
2、Join 连接查询
SELECT * FROM `edi_test_task` AS t1
RIGHT JOIN (SELECT task_id FROM `edi_test_task` ORDER BY task_id desc LIMIT 600,9) AS t2 on t1.task_id=t2.task_id
意思:先通过查询得到索引的Id,然后根据索引获得所需的数据。
3、创建索引表
建一个索引表: t (id,title,vtype) 并设置成定长,然后做分页,分页出结果再到 collect 里面去找info 。 【复合索引,如果有where字句的话,可以使用复合索引。】
最新文章
- 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法
- DOM0,DOM2,DOM3 事件基础知识
- SQL Server里的闩锁耦合(Latch Coupling)
- HDU 4920 居然会超时
- char、wchar_t、strlen、wcslen
- 与你相遇好幸运,Sail.js创建.sailsrc文件
- LevelDB源码之四LOG文件
- homework-09
- 问题:关于贴友一个用js传递value默认值的简单实现
- matlab中的sub2ind函数
- python小技巧01递归解释内嵌
- windows 10隐藏各种文件夹
- vue2 -- axios
- ueditor富文本编辑器跨域上传图片解决办法
- Zookeeper 集群搭建--单机伪分布式集群
- R kernel for Jupyter Notebook 支持r
- 使用java api操作HDFS文件
- charles https抓包
- OpenCV 常用汇总
- springboot成神之——application.properties所有可用属性
热门文章
- HDOJ/HDU 1200 To and Fro(加密解密字符串)
- Linux IIO子系统分析
- 3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 拥挤距离计算 crowddist.c
- art template前端模板引擎
- win8笔记本无法搜索wifi信号找不到WLAN该 wifi共享特别注意的服务
- MVC-@html.ActionLink的几种参数格式
- [D3] 8. Margins
- Performing a thread dump in Linux or Windows--reference
- Response乱码的解决方法