各种数据库分页查询方法

具体实现中,根据所用数据库、数据量、实现分页方式,选择分页实现快的方式实现。

一、MYSQL分页查询方法

MYSQL分页查询主要使用其自带的limit函数,但需根据查询量来决定具体的使用方式,如只有几千或几万数据,则直接用 limit m,n方式,

如数据量较多,则要注意limit的使用方式。

// limit m , n:从第 m 条数据开始,获取 n 条数据

1、数据量少的方式:select * from tablename limit m,n;

// limit m , n:m 可省略,省略或默认从结果集的第 0 条 开始

2、数据量多的方式:

// 从490000开始取10条

a.  select * from tablename where id>=(select id from tablename limit 490000,1) limit 10 ;

b.  select * from tablename limit 490000,10 ;

a 方式要比 b方式快

二、DB2分页查询方法

DB2分页查询方法主要以 rownumber() over() 函数方式实现,如下:

select * from(select 字段1,字段2...rownumber() over(order by id desc) as rn from tablename where...) as t1

where t1.rn between m and n / t1.rn >m and t1.rn <= n;

三、ORACLE分页查询方法

ORACLE分页查询主要以rownum关键字和rownumber() over()函数实现,如下:

1、rownum关键字--无排序--获取 n 到 m条数据

a. 在查询的第二层通过ROWNUM <= m 来控制最大值,在查询的最外层控制最小值:

select * from (

select a.*, rownum rn from (

select * from tablename) a

where rownum <= m)

where rn >= n

b.  直接在最外层控制最大值最小值

select * from (

select a.*, rownum rn from (

select * from tablename) a)

where rn between n and m

//在绝大多数情况下,a方式要比b方式快的多

2、rownum关键字--需排序--获取 n 到 m条数据

// 错误方式

select * from

(select t.*,rownum rn from mytable t order by t.id) b

where b.row_num between n and m

//错误原因:上面sql会先执行 rownum rn产生行号,再 执行order by 排序,但是最后结果通过rn即行号获取,order by排序不起作用

// 正确做法:先排序,对排序后的结果生成行号,则根据rn获取结果获取到的是排序后的结果

//正确方式:再加一层先排序

select * from

(select a.*, rownum rn from (select * from tablename order by id)a)b

where b.rn between n and m

3、rownum() over()方式--同db2方式

select * from(select 字段1,字段2...rownumber() over(order by id desc) as rn from tablename where...) as t1

where t1.rn between m and n / t1.rn >m and t1.rn <= n;

四、SQL SERVER分页查询方法

sql server 2005及以上版本,可用 rownum() over()方式实现

不可用rownum() over()方式版本用top关键字方式实现

select top num * from tablename where ..........

五、MONGODB分页查询方法

mongoDB的分页查询是通过limit(),skip(),sort()这三个函数组合进行分页查询的

用skip方法查询大量数据的时候速度慢

page1 = db.things.find().limit(20)

    page2 = db.things.find().skip(20).limit(20)

    page3 = db.things.find().skip(40).limit(20)

find(查询条件),skip(跳过多少条数据),limit(查询多少条数据),sort(排序依据):sort({"age":1})1--正序,-1--反序

MySQL对应mongodb:

查询:

MySQL:SELECT * FROM user

Mongo: db.user.find()

MySQL:SELECT * FROM user WHERE name = ‘starlee‘

Mongo: db.user.find({‘name‘ : ‘starlee‘})

     插入:

MySQL:INSERT INOT user (`name`, `age`) values (‘starlee‘,25)

Mongo:db.user.insert({‘name‘ : ‘starlee‘, ‘age‘ : 25})

删除:

MySQL:DELETE * FROM user

Mongo:db.user.remove({})

MySQL:DELETE FROM user WHERE age < 30

Mongo:db.user.remove({‘age‘ : {$lt : 30}})

更新:

MySQL:UPDATE user SET `age` = 36 WHERE `name` = ‘starlee‘

Mongo:db.user.update({‘name‘ : ‘starlee‘}, {$set : {‘age‘ : 36}})

MySQL:UPDATE user SET `age` = `age` + 3 WHERE `name` = ‘starlee‘

Mongo:db.user.update({‘name‘ : ‘starlee‘}, {$inc : {‘age‘ : 3}})

==============others=======================

MySQL:SELECT COUNT(*) FROM user WHERE `name` = ‘starlee‘

Mongo:db.user.find({‘name‘ : ‘starlee‘}).count()

MySQL:SELECT * FROM user limit 10,20

Mongo:db.user.find().skip(10).limit(20)

MySQL:SELECT * FROM user WHERE `age` IN (25, 35,45)

Mongo:db.user.find({‘age‘ : {$in : [25, 35, 45]}})

MySQL:SELECT * FROM user ORDER BY age DESC

Mongo:db.user.find().sort({‘age‘ : -1})

MySQL:SELECT DISTINCT(name) FROM user WHERE age > 20

Mongo:db.user.distinct(‘name‘, {‘age‘: {$lt : 20}})

MySQL:SELECT name, sum(marks) FROM user GROUP BY name

Mongo:

db.user.group({

key : {‘name‘ : true},

cond: {‘name‘ : ‘foo‘},

reduce: function(obj,prev) { prev.msum += obj.marks; },

initial: {msum : 0}

});

MySQL:

SELECT name FROM user WHERE age < 20

Mongo:db.user.find(‘this.age < 20‘, {name : 1})

				
时间: 2024-10-12 17:37:37

各种数据库分页查询方法的相关文章

数据库分页查询方法

在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用. 下面就分别给大家介绍.讲解一下三种数据库实现分页查询的方法. 一. MySQL 数据库分页查询 MySQL数据库实现分页比较简单,提供了LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有

MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)

一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE … LIMIT 10; #返回前10行select * from table WHERE … LIMIT

mssql数据库分页查询效率的一次体会

这几天在一个项目,合同管理系统(是对老系统的升级和改造,老系统是VS2008做的),由于数据库的表是项目组根据老系统的数据库建的,所以在查询的适合我就需要自己创建视图来完成多表的查询,起初我是读取项目组成员建好的视图,里面有7张表,其中还包含视图,由于视图中join视图是不支持索引的,所以在查询第一页的时候(每一页20条数据,总共数据量是10W条左右),耗时800毫秒,但是 当row_number达到上千的时候,基本查询要6秒以上,每点击下一页,耗时会增加十几毫秒,到40000条也就是中间的时候

主流数据库分页查询介绍

1 背景概述 由于在项目中需要在页面上显示数量非常多的数据, 在进行数据库查询时首先会把所有的数据都查询出来,然后在进行显示,这时候分页查询的操作就必不可少了,本文介绍Mysql.Oracle.sql Server 三种数据库进行分页查询的用法. 2 预期读者 数通畅联内部员工 广大计算机爱好者 3 名词解释 分页查询 就是将将过多的结果在有限的界面上分多页来显示,一般将分页查询分为两类:逻辑分页.物理分页.    逻辑分页是在用户第一次访问时,将数据库的所有记录全部查询出来,添加到一个大集合中

各种数据库分页查询sql语句大全

在显示记录条目时往往要用到分页,一种常用的办法是利用各种数据库自带的定位接口对原始查询语句进行改写,从而只取出特定范围的某些记录.不同的数据库,查询定位接口是不一样的,下面做一汇总: 数据库 分页查询语句 说明 MySQL    "QUERY_SQL limit ?,?"            使用limit关键字,第一个"?"是起始行号, 第二个"?"是返回条目数 Oracle SELECT * FROM ( SELECT A.*, ROWNU

数据库分页查询

分页语句: Oracle: --这种分页查询方式不仅仅是针对单表的简单查询,对于最内层查询是复杂的 --多表联合查询或最内层查询包含排序的情况一样有效 SELECT * FROM ( SELECT ROWNUM RN , T.*  FROM (SELECT * FROM FTNEMR.PATIENT_VISIT) T WHERE ROWNUM <= 40 ) WHERE RN >= 21 ORDER BY PATIENT_ID; --这种方式比上面的方式要性能要低很多 SELECT * FRO

JavaWeb分页显示内容——数据库分页查询

转载请注明原文地址: 在开发过程中,经常做的一件事,也是最基本的事,就是从数据库中查询数据,然后在客户端显示出来.当数据少时,可以在一个页面内显示完成.然而,如果查询记录是几百条.上千条呢?直接一个页面显示完全的话,表格得多长啊......这时,我们可以用分页技术. 何为分页?效果图如下: 这里总共查询了100条记录,如果一次性显示的话表格会很多行,用户体验不佳.而我们采用分页显示的话,一页显示10条记录,共十页.用户可以自行翻阅,记录少,清晰显示. 下面谈谈分页效果的实现,思路有两种: 其一:

MySQL数据库分页查询,Oracle数据库分页查询,SqlServer数据库分页

DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `pass` varchar(255) NOT NULL, `sex` varchar(255) NOT NULL, `age` int(11) NOT NULL, `address` varchar(255) DEFAULT NULL, PRIMA

MySQL大数据量分页查询方法及其优化

方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃. 方法2: 建立主键或唯一索引, 利用索引(假设每页10条) 语句样式: MySQL中,可用如下方法: SELECT * FRO