oracle 单条查询 60ms,简单总结db2,sqlserver,oracle,mysql 取数据集中的几条数据的方法...

db2:

方法一:

select * from table_name order by column_name desc fetch first rows 5 only

获取表里的前5条数据

select  * from umg_user where userid not in (select userid from umg_user fetch first 5 rows only) fetch first 5 rows only

方法二:

select * from (select rownumber()over() as tempid,bbs.username from bbsuser as bbs) as tb where tb.tempid>5 and tb.tempid<11

sqlserver:

top方案:

sql codeselect top 10 * from table1

where id not in(select top 开始的位置 id from table1)

max:

sql codeselect top 10 * from table1

where id>(select max(id)

from (select top 开始位置 id from table1order by id)tt)

row:

sql codeselect *

from (

select row_number()over(order by tempcolumn)temprownumber,*

from (select top 开始位置+10 tempcolumn=0,* from table1)t

)tt

where temprownumber>开始位置

3种分页方式,分别是max方案,top方案,row方案

效率:

第1:row

第2:max

第3:top

缺点:

max:必须用户编写复杂sql,不支持非唯一列排序

top:必须用户编写复杂sql,不支持复合主键

row:不支持sqlserver2000

测试数据:

共320万条数据,每页显示10条数据,分别测试了2万页、15万页和32万页。

页码,top方案,max方案,row方案

2万,60ms,46ms,33ms

15万,453ms,343ms,310ms

32万,953ms,720ms,686ms

是一种通过程序拼接sql语句的分页方案,

用户提过的sql语句不需要编写复杂的sql逻辑

诺用户提供sql如下

sql code

select * from table1

从第5条开始,查询5条,处理后sql变为

sql code

select *

from (

select row_number()over(order by tempcolumn)temprownumber,*

from (select top 10 tempcolumn=0,* from table1)t

)tt

where temprownumber>5

这是什么意思呢?分解一下

首先将用户输入的sql语句转稍稍修改

在select后添加top 开始位置+条数变成

再外加一列tempcolum,变成这样

sql code

select top 20 tempcolumn=0,* from clazz

嵌套一层,这样便可查询出行号

刚才那个列就是用来这里order by用的

(也不知道sqlserver的row_number函数为什么必须要order by)

sql code

select row_number()over(order by tempcolumn)temprownumber,*

from (修改过的查询)t

再套一层,过滤掉行号小于开始位置的行

sql code

select * from (第二层)tt

where temprownumber>10

oracle:

select * from (selectrownum no,c.* from cbrc_hsgl c ) where no>? and no<=?;

mysql:

select * from userlist limit3,4;

自己明白就行,哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值