mysql分页查询语句

Oracle、MySql、SQLServer 数据分页查询

旧城冷巷雨未停 提交于 2019-12-04 06:40:44
Oracle、MySql、SQLServer 数据分页查询 最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一)、 mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize 如下面的截图,每页显示的记录数为20: 查询(1-20)这20条记录 查询(21-40)这20条记录 mysql的分页查询就这么简单...... (二)、sqlserver2005的分页查询 在sqlserver2005之前一直借助top关键字来实现分页查询,不过效率低,在sqlserver2005及其之后的版本都使用row_number()解析函数来完成分页查询,效率有了很大的提高,不过sql语句比较复杂,下面给出分页查询的通式: /* * firstIndex:起始索引 * pageSize:每页显示的数量 * orderColumn:排序的字段名 * sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句 */

分页

与世无争的帅哥 提交于 2019-12-03 15:32:21
由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 100就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。 Oracle分页只能小于不能大于 select * from (select rownum rn,Stu.* from Stu where rownum<=100) ss where ss.rn>=60 mysql 分页 select * from Stu order by id limit 100000,30; select * from Stu where id>=(select id from Stu order by id limit 10000,1) limit 30; 来源: https://www.cnblogs.com/Dfrank/p/11802393.html

Mysql的limit优化方案解析

我怕爱的太早我们不能终老 提交于 2019-12-03 07:02:33
MySQL的分页查询通常通过 limit 来实现。 MySQL的 limit 基本用法很简单。 limit 接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。 疑问: 对于小的偏移量,直接使用 limit 来查询没有什么问题,但随着数据量的增大,越往后分页, limit 语句的偏移量就会越大,速度也会明显变慢。 优化思想 : 避免数据量大时扫描太多的的记录 解决 : 子查询的分页方式或者JOIN分页方式。 JOIN分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。 下面举个例子。一般MySQL的主键是自增的数字类型,这种情况下可以使用下面的方式进行优化。 下面以真实的测试环境的100万条数据的一张表为例,比较一下优化前后的查询耗时: -- 传统limit,文件扫描 [SQL]SELECT * FROM tableName ORDER BY id LIMIT 500000,2; 受影响的行: 0 时间: 5.371s -- 子查询方式,索引扫描 [SQL] SELECT * FROM tableName WHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 500000 , 1) LIMIT 2; 受影响的行: 0 时间: 0

mysql 的分页查询

て烟熏妆下的殇ゞ 提交于 2019-12-03 03:56:55
原文 ###一、mysql 的 limit 语法 LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)。 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。第一个#表示记录行的最大数目,第二数表示从第几行开始记录。 ###二、mysql 的分页方式 基本分页方式 SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 子查询的分页方式 SELECT * FROM articles WHERE id >= (SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10 JOIN 分页方式 SELECT * FROM `content` AS t1 JOIN (SELECT id FROM `content` ORDER BY id

mysql分页与分页性能查询优化

天涯浪子 提交于 2019-12-03 03:56:18
mysql分页就直接使用limit进行操作,limit如果我们直接不加任何处理可能数据大了就会很卡的。 一. 最常见MYSQL最基本的 分页 方式: select * from content order by id desc limit 0, 10 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似: select * from content order by id desc limit 10000, 10 一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。 MYSQL分页性能优化 limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。 文中提到一种”clue”的做法,给翻页提供一些”线索”,比如还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是9527,最小的是9500,如果我们只提供”上一页”、”下一页

MVC模式实现分页案例(java)

匿名 (未验证) 提交于 2019-12-02 21:52:03
必须掌握分页案例 Ŀ¼ 必须掌握分页案例 1.分页概述 2.分页实现思路 3.分页步骤 4.分页代码实现 4.1 创建工程,并导入相关jar包 4.2数据库配置文件druid.properties 4.3创建工具类和实体类 4.4Dao层接口和实现类 4.5Service层接口和实现类 4.6web层代码 4.7JSP代码 1.分页概述 分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据在页面上所占的空间每页显示若干行,比如一般20行是一个比较理想的显示状态。 2.分页实现思路 分页的思路 对于海量的数据查询,需要多少就取多少,显然是最佳的解决方法,假如某个表中有200万条记录,第一页取前20条,第二页取21~40条记录。 select * from 表名 order by id limit 0,20 ; select * from 表名 order by id limit 20,20; select * from 表名 order by id limit 40,20; 3.分页步骤 步骤: 1.确定每页显示的数据数量 2.确定分页显示所需的总页数 3.编写SQL查询语句,实现数据查询 4.在JSP页面中进行分页显示设置 4.分页代码实现 4.1 创建工程,并导入相关jar包

【Java】【33】分页处理

匿名 (未验证) 提交于 2019-12-02 21:52:03
前言: 数据量太大时,前端就需要做翻页显示了,即点击第几页就拉取第几页的数据 正文: 1,在xml中写查询语句 Service层 注:用了rowBounds其实就是假分页了,会把数据查到内存里来,再去对应的数据集合给到前端。真分页的话,数据库查询XML里Oracle和MySQL写法不同,要注意 @Autowired TheDao theDao; public PageModel<UserVo> getClerkListByBlur(QueryVo query) { RowBounds rowBounds = new RowBounds((query.getPage() - 1) * query.getRows(), query.getRows()); int total = this.theDao.getCount(query); PageModel<UserVo> pageModel = new PageModel<UserVo>(); pageModel.setPageNo(query.getPage()); pageModel.setPageSize(query.getRows()); pageModel.setTotalRecords(total); List<UserVo> list = this.theDao.getList(query, rowBounds); /

mybatis入门使用

对着背影说爱祢 提交于 2019-12-02 21:30:00
1.编写mybatis.xml文件 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 配置 mybatis 的环境 --><environments default="mysql"><!-- 配置 mysql 的环境 --><environment id="mysql"><!-- 配置事务的类型 --><transactionManager type="JDBC"></transactionManager><!-- 配置连接数据库的信息:用的是数据源(连接池) --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ee50"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment><

MySQL分页查询优化

隐身守侯 提交于 2019-12-02 20:14:40
转自: https://www.cnblogs.com/youyoui/p/7851007.html 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名: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

mysql 怎么实现随机查询并分页,不重复查询

寵の児 提交于 2019-12-01 21:28:40
需求: 企业应用中,一般数据量不是很特别多,同时大多在局域网内,性能不会有问题,一般不会分页处理,随机排序数据一般不会有问题 web网站中,一般都用到分页处理,目前数据量比较少,考虑到数据“动态”,想随机顺序展现数据(每次看到的不一样) 方案: 数据库解决: 用mysql的select * from tab order by rand() 用rand()会用问题,会出现数据重复:从数据库的rand()和分页原理上,出现重复不可避免(分页其实对sql语句结果的分段提取,对结果集从第m条记录到第n条记录;mysql的rand()实现原理是每次sql的结果集的全部按算法打乱排序;而分页是有上下文关系的,所以可能出现某条记录出现在不同的分页中,如某条记录在第一次sql执行时,rand()排序后,在第一页,而第二次执行sql时,rand()排序后,落在第二页,这条记录在分页过程中,用了多次) 在可以容忍重复的情况下可以用,不过mysql的rand()函数效率非常低,建议用表中的主键做散列计算排序(如主键是数字类型,可求余运算来散列) 如不能容忍重复,数据库好像比较难直接解决(网站web应用又没有固定的连接,利用session id标识,建立临时表?好像不大现实) 程序解决: 第一页时,取到内存,然后翻页时,用剩余数据,比较复杂,也不大现实(标识session id,何时清理...?) 结论: