mysql分页查询语句

mysql 分页 limit 优化

二次信任 提交于 2020-02-27 14:31:11
1.语法: *** limit [offset,] rows 一般是用于select语句中用以从结果集中拿出特定的一部分数据。 offset是偏移量,表示需要的数据是跳过多少行数据之后的,可以忽略;rows表示要拿多少行数据。 2,场景: 前台要展示数据库中数据,需要后台实现分页,传入数据要有“页码page”跟“每页数据条数nums”。 select * from t_table order by id limit (page-1)*nums,nums 3.问题: 当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢 select * from t_table order by id limit 10000000,10 上边SQL语句表示从表t_table 中拿数据,跳过10000000行之后,拿10行 4.优化思路: 1.能不能跳过10000000条数据然后读取10条,而不是读取10000010条数据然后返回10条数据。 2.order by字段需要建立索引 改进后的SQL语句如下: select * from t_table where id >= ( select id from t_table order by id limit 10000000,1 ) limit 10 注:假设id是主键索引

MyBatis(6)——分页的实现

我们两清 提交于 2020-02-16 13:43:23
分页的实现 a)通过mysql的分页查询语句: 说明:sql的分页语句格式为select * from aaa limit #{startIndex},#{pageSize} //------------映射文件------------// //*设置传入参数类型为Map,parameterType="Map" <!--查询语句,分页查询--> <!-- 因为字段名不一致,此处的resultType换成结果集映射resultMap --> <select id="selectAll" parameterType="Map" resultMap="UserMap"> select * from users limit #{startIndex},#{pageSize} </select> //------------实体逻辑处理类:dao------------// //*新建Map参数并传入 public List<User> getAll(int currentPage,int pageSize) throws IOException { SqlSession session=MyBatisUtil.getSession(); Map<String, Integer> map=new HashMap<String, Integer>(); map.put("startIndex"

Mybatis的分页工具

╄→гoц情女王★ 提交于 2020-02-16 03:26:08
配置拦截器插件 特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor 。 com.github.pagehelper.PageHelper 现在是一个特殊的 dialect 实现类,是分页插件的默认实现类,提供了和以前相同的用法。 1. 在 MyBatis 配置 xml 中配置拦截器插件 <!-- plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下: properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers? --> <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 --> <property name="param1" value="value1"/> </plugin> </plugins> 2. 在 Spring 配置文件中配置拦截器插件 使用

MyBatis物理分页的代码实现

柔情痞子 提交于 2020-02-05 03:09:38
一.分页 MyBatis有两种分页方法: 内存分页 ,也就是假分页, 本质是查出所有的数据然后根据游标的方式,截取需要的记录 ,如果数据量大,执行效率低,可能造成内存溢出。 物理分页 , 就是数据库本身提供了分页方式 ,如MySql的limit,执行效率高,不同数据库实现不同。 MyBatis Generator使用: MyBatis Generator使用示例 Spring集成MyBatis: Spring集成MyBatis持久层框架 二.MyBatis执行流程 MyBatis执行sql流程如下图,实现数据库的物理分页,需要 通过拦截StatementHandler重写的sql语句 。 三.分页实现 1.实现MyBatis的Interceptor接口,创建PageInterceptor类 @Intercepts({@Signature(type=StatementHandler.class, method = "prepare", args={Connection.class, Integer.class})}) public class PageInterceptor implements Interceptor { private String sqlRegEx = ".*Page"; public Object intercept(Invocation invocation

学成在线(第7天)

一曲冷凌霜 提交于 2020-02-01 10:22:42
我的课程 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询。 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示。 上边的查询要实现分页、会存在多表关联查询,所以建议使用mybatis实现我的课程查询。 PageHelper PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能。 我的课程具有分页功能,本项目使用Pagehelper实现Mybatis分页功能开发,由于本项目使用springboot开发,在 springboot上集成pagehelper( https://github.com/pagehelper/pagehelper-spring-boot ) PageHelper的使用方法及原理如下: 在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中 PageHelper 在mybatis执行sql前进行拦截,从ThreadLocal取出分页参数,修改当前执行的sql语句,添加分页 sql。 最后执行添加了分页sql的sql语句,实现分页查询。 PageHelper配置 1)添加依赖 <dependency>

Mysql分页查询

こ雲淡風輕ζ 提交于 2020-01-24 23:57:14
分页查询 应用场景 当要显示的数据,一页显示不全,需要分页提交请求sql请求 语法 SELECT 查询列表 FROM 表 WHERE 筛选条件 ...... LIMIT 起始索引,显示条目数 起始索引从0开始 示例 SELECT * FROM employees LIMIT 0,5; 特点 放在查询语句最后 公式 要显示页数 page,每页的条目数 size SELECT 查询列表 FROM 表 LIMIT (page-1)*size,size; 来源: CSDN 作者: 陌尘吖 链接: https://blog.csdn.net/qq_25884515/article/details/103914535

JDBC分页

旧街凉风 提交于 2020-01-18 06:18:39
不知道大家做项目做到最后有什么感觉没有,其实大家做来做去就是做一个列表加上分页和多条件的查询( http://xdwangiflytek.iteye.com/blog/1358261 ),只是不同的项目业务流程不一样而已,所以今天我想说说这里的分页。 1、 大家需要了解的是为什么我们需要分页? 因为当数据量太大时,会影响查询和传输的性能,并且我们从用户角度来考虑的话,如果让用户一次性看到成千上万条记录那用户也会疯掉的。 2、 对我们来说有哪些可实现的分页技术? a、 存储过程分页,即在数据库中创建一个存储过程,传入SQL和页码获取当前页的记录,这个需要大家对存储过程有比较好的认识(我这块不行),当然这个从性能上来说是最好的,但是不能跨数据库平台。 b、 使用数据库专有SQL语句进行分页(Oracle的rownum、MSSQL的top、MySql的limit等),性能也很好,但是还是不能跨数据库(其实真实项目中没那么多项目要求都跨数据库)。 c、 JDBC分页,通过Statement的statement.setMaxRow(endIndex)和resultSet.absoulte(beginIndex)取得当前页范围内的记录。此种方式的性能依赖于厂商对JDBC规范的实现。这种方式的通用性是最好的,性能也不错,完全与数据库平台无关了。 d、

MySQL数据库limit(分页)语句

我与影子孤独终老i 提交于 2020-01-13 20:58:55
select * from persons limit A, B; 解释: A,查询起点 B,你需要的行数 示例: select * from persons limit 0 , 4; 解释: 起点位置为0,开始查询,返回4条数据 String sql="select * from category limit "+(p-1)*Resource.PAGETOTAL+","+Resource.PAGETOTAL ; 这句话的作用是从category表中按每页为 Resource.PAGETOTAL 这个常量的数据显示。 来源: CSDN 作者: 奔跑的狮⁠子 链接: https://blog.csdn.net/weixin_42247720/article/details/103963047

mysql和oracle分页

寵の児 提交于 2020-01-12 03:02:00
mysql分页 关键字limit,limit m,n 其中m表示起始位置的下标,下标从0开始。n表示要显示的条数,比如要查询一个表的第2到5条数据。 select * from emp limit 1,4; oracle分页 关键字rownum, rownum表示返回数据的行号。使用它需谨慎,不能用rownum大于( 大于1 的数值)、大于等于( 大于或等于1 的数值)、= (大于或等于1 的数值),否则无结果。 select count(*) from gcfr_t_vch a where rownum>1; 运行结果如下: 实际上这个表里是有数据的,理论上应该是能查出来数据的。但是为什么没有出来呢? 这是因为: 1、ROWNUM是伪列,必须要要有返回结果后,每条返回记录就会对应产生一个ROWNUM数值; 2、返回结果记录的ROWNUM是从1开始排序的,因此第一条始终是1; 这样,当查询到第一条记录时,该记录的ROWNUM为1,但条件要求ROWNUM>1,因此不符合,继续查询下一条;因为前面没有符合要求的记录,因此下一条记录过来后,其ROWNUM还是为1,如此循环,就不会产生结果。 备注:当使用“>、>=、=、between...and”这些条件时, 从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件,会被删除,接着取下条 。

oracle如何实现去重和分页

一曲冷凌霜 提交于 2020-01-10 20:08:24
一:oracle实现去重: user数据表: 分两步:1.查询重复数据 2.删除重复数据 1.查询重复数据: 在oracle中实现查询重复数据,可以借助于rowid这个伪列。oracle中每个表物理上都存在一个rowid的列,这个列 是每行数据在oracle中唯一标识,每个表的主键可以保证数据在本表中不重复,rowid可以保证该条数据在数据库 中的所有表中都不重复。 --查询重复数据 用户名和密码都相同的数据叫重复数据 select u1.*,rowid from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and u1.password=u2.password and u1.rowid>u2.rowid ); --删除重复数据 delete from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and u1.password=u2.password and u1.rowid>u2.rowid ); 例:把用户表的主键id加上,去重重复数据,只要用户名相同,就认为这条数据重复了。 delete from users u1 where exists ( select