mysql分页查询语句

mybatis逻辑分页与物理分页

谁说我不能喝 提交于 2020-01-10 03:37:39
最近在搭建springboot框架的时候,构建ORM的时候,选择mybatis的时候,我们一般时候用: 1.mybatis自带的分页RowBounds; 2.mybatis插件或者直接书写sql进行分页; (1).通过自己的封装SQL根据beginNum(开始条数)和endNum(需要的条数)来进行分页 (2).PageHelper分页插件 --> mybatis自带分页RowBounds: //逻辑分页 Java: RowBounds rb=new RowBounds(offset, limit); //offset(从多少条开始);limit(获取多少条) SqlSession sqlSession=sqlSessionFactory.openSession();//sqlSessionFactory通过读取mybatis配置文件的输入流然后通过new SqlSeesionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));最终得到SqlSessionFactory; List<Student> studentlist=sqlSession.selectList("xx.xx.Mapper.findStudent",null,rb);/

MyBatis:简单物理分页实现(Plugin)

荒凉一梦 提交于 2020-01-08 19:58:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、必要性 首先,介绍一下使用自定义拦截器来进行物理分页的必要性。我们知道MyBatis中的SqlSession接口中提供一个带分页功能的方法: public interface SqlSession extends Closeable { <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds); // .... } 使用该方法,我们在查询时可以通过为selectList(..)方法提供一个RowBounds参数,来使该语句带有分页功能,举个例如,假设我需要取出查询记录的前三条记录,可以这样: // 获取sqlSession的步骤略,statement略,mapper中的映射语句为 select * from users List<User> list = sqlSession.selectList(statement, null, new RowBounds(0,3)); 这时我们获取到的记录就是查询记录的前三条记录(select * from users的查询结果) 这时我们会有个疑问,既然MyBatis已经为我们提供了分页的处理类,为何我们还要再重复造轮子(再手动写一个拦截器)呢?

吴裕雄 11-MySQL查询数据

蹲街弑〆低调 提交于 2019-12-27 20:22:21
以下为在MySQL数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M] 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割, 并使用WHERE语句来设定查询条件。 SELECT 命令可以读取一条或者多条记录。 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 你可以使用 WHERE 语句来包含任何条件。 你可以使用 LIMIT 属性来设定返回的记录数。 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。 以下实例将返回数据表 runoob_tbl 的所有记录: select * from runoob_tbl; 使用PHP脚本来获取数据 使用 PHP 函数的 mysqli_query() 及 SQL SELECT 命令来获取数据。 该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来使用或输出所有查询的数据。 mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组, 或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。 以下实例为从数据表

DB2分页

戏子无情 提交于 2019-12-26 16:02:07
前言 最近在做一个DB2的项目,遇到分页处理的设计时开始犯难。以前一直采用MySQL作为项目数据库,其中的Limit关键字非常人性化,MySQL把分页的处理逻辑封装到了数据库的核心中,使得做查询设计时,根本不用过多的考虑分页的问题。 可是DB2却把这个难题推到了我们面前。其实不止DB2如此,很多大型的数据库例如MS SQL Server也不支持分页关键字。当然,DB2中提供了RowNumber函数,同Oracle有一些类似。有很多解决方案都是由此关键字得来的。 为了解决这个问题,互联网上提供了如下几个解决方案: 方案一:利用JDBC2的数据集。JDBC2数据集中提供了absolute方法,用来在查询的结果集中进行定位,数据集保存在内存中,你必须告诉JDBC你想定位的绝对位置,这个位置由你来计算。对于海量的数据集,这种方式效率并不高。 方案二:利用DB2自带的函数 ROWNUMBER() OVER(ORDER BY sort-key),这里的RowNumber函数是通过排序计算出来的行的顺序号。根据这个原理,可以先SELECT满足WHERE条件的所有记录,然后用ORDER BY排序,在行号的基础上,结合子查询的组合得出查询结果。例如: select * from ( select rownumber() over(order by foo.bar, foo.baz) as

MySQL中使用LIMIT分页

情到浓时终转凉″ 提交于 2019-12-26 15:58:43
  需求:客户端通过传递pageNum(页码)和pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据。   我们知道MySQL提供了分页函数limit m,n,但是该函数的用法和需求不一样,所以就需要根据实际情况去改写以满足需求。分析如下:   查询第1条到第10条数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;   查询第10条到第20条数据的sql是:select * from table limit 10,20; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;   查询第20条到第30条数据的sql是:select * from table limit 20,30; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;   通过上面的分析,可以归纳得出符合需求的分页SQL伪代码是:select * from table limit (pageNum-1)*pageSize,pageSize。总而言之,我们只需要告诉数据库要从第几行开始拿多少条数据就行了。   但是

MySQL大数据量分页性能优化

允我心安 提交于 2019-12-25 13:05:12
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。 测试实验 1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count 当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下: select * from product limit 10, 20 0.016秒 select * from product limit 100, 20 0.016秒 select * from product limit 1000, 20 0.047秒 select * from product limit 10000, 20 0.094秒 我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右) select * from product limit 400000, 20 3.229秒 再看我们取最后一页记录的时间 select * from product limit 866613, 20 37.44秒 难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时 间是无法忍受的。

MySQL 的分页查询 SQL 语句

限于喜欢 提交于 2019-12-25 12:59:49
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) AND category_id = 123 ORDER BY id LIMIT 10; 还可以通过 JOIN

分页查询常错误

非 Y 不嫁゛ 提交于 2019-12-19 05:35:47
MySQL分页查询语句: select * from student limit 0,3;//代表第0行数据开始,展示3行 页数为n,每页m行 select * from student limit (n-1)*m,m; 如果遇到下面这种错误,重启服务器就好,并不影响结果 java.lang.IllegalStateException: Illegal access: this web application instance has been stopped Operation not allowed after ResultSet closed 我的原因是ResultSet不关闭 来源: CSDN 作者: LDY19981028 链接: https://blog.csdn.net/LDY19981028/article/details/103604400

MySQL分页查询性能优化

徘徊边缘 提交于 2019-12-17 04:22:28
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数组,最大为varchar(500),id字段为索引,且为递增。 数据量:5709294 MySQL版本:5.7.16 线下找一张百万级的测试表可不容易,如果需要自己测试的话,可以写shell脚本什么的插入数据进行测试。 以下的 sql 所有语句执行的环境没有发生改变,下面是基本测试结果: select count(*) from orders_history; 返回结果:5709294 三次查询时间分别为: 8903 ms 8323 ms 8401 ms 一般分页查询 一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于指定

MySQL分页查询优化

跟風遠走 提交于 2019-12-16 10:55:57
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数据,最大为varchar(500),id字段为索引,且为递增。 数据量:5709294 MySQL版本:5.7.16 线下找一张百万级的测试表可不容易,如果需要自己测试的话,可以写shell脚本什么的插入数据进行测试。 以下的 sql 所有语句执行的环境没有发生改变,下面是基本测试结果: select count(*) from orders_history; SQL 返回结果:5709294 三次查询时间分别为: 8903 ms 8323 ms 8401 ms 一般分页查询 一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下: SELECT * FROM table LIMIT [ offset , ] rows | rows OFFSET offset SQL LIMIT