一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

mysql、sql server、oracle數(shù)據(jù)庫分頁查詢及分析(操作手冊)

 peijs5201314 2015-09-22
 

 

mysql、sql server、oracle數(shù)據(jù)庫分頁查詢及分析(操作手冊) 

 
1、mysql分頁查詢

方式1:

select * from table order by id limit m, n;

該語句的意思為,查詢m+n條記錄,去掉前m條,返回后n條記錄。無疑該查詢能夠?qū)崿F(xiàn)分頁功能,但是如果 m的值越大,查詢的性能會(huì)越低 (越后面的頁數(shù),查詢性能越低),因?yàn)镸ySQL同樣需要掃描過m+n條記錄。

方式2:

select * from table where id > #max_id# order by id limit n;

該查詢每次會(huì)返回n條記錄,卻無需像方式1掃描過m條記錄,在大數(shù)據(jù)量的分頁情況下,性能可以明顯好于方式1,但該分頁查詢必須要每次查詢時(shí)拿到上一次查 詢(上一頁)的一個(gè)最大id(或最小id)。該查詢的問題就在于,我們有時(shí)沒有辦法拿到上一次查詢(上一頁)的最大id(或最小id),比如當(dāng)前在第3 頁,需要查詢第5頁的數(shù)據(jù),該查詢方法便愛莫能助了。

方式3:

為了避免能夠?qū)崿F(xiàn)方式2不能實(shí)現(xiàn)的查詢,就同樣需要使用到limit m, n子句,為了性能,就需要將m的值盡力的小,比如當(dāng)前在第3頁,需要查詢第5頁,每頁10條數(shù)據(jù),當(dāng)前第3頁的最大id為#max_id#:

select * from table where id > #max_id# order by id limit 20, 10;

其實(shí)該查詢方式是部分解決了方式2的問題,但如果當(dāng)前在第2頁,需要查詢第100頁或1000頁,性能仍然會(huì)較差。

方式4:

select * from table as a inner join (select id from table order by id limit m, n) as b on a.id = b.id order by a.id;

該查詢同方式1一樣,m的值可能很大,但由于內(nèi)部的子查詢只掃描了字段id,而不是整張表,所以性能要強(qiáng)于方式1查詢,并且該查詢能夠解決方式2和方式3不能解決的問題。

方式5:

select * from table where id > (select id from table order by id limit m, 1) limit n;

該查詢方式同方式4,同樣通過子查詢掃描字段id,效果同方式4。至于性能的話,方式5的性能會(huì)略好于方式4,因?yàn)榉绞?不需要在進(jìn)行表的關(guān)聯(lián),而是一個(gè)簡單的比較。

2、sql server分頁查詢

方式1:

假設(shè)頁數(shù)是10,現(xiàn)在要拿出第5頁的內(nèi)容,查詢語句如下:--10代表分頁的大小

select top 10 *
from test
where id not in
(
 --40是這么計(jì)算出來的:10*(5-1)
 select top 40 id from test order by id
)
order by id

原理:需要拿出數(shù)據(jù)庫的第5頁,就是40-50條記錄。首先拿出數(shù)據(jù)庫中的前40條記錄的id值,然后再拿出剩余部分的前10條元素

方式2:

還是以上面的結(jié)果為例,采用另外的一種方法--數(shù)據(jù)的意思和上面提及的一樣

select top 10 *
from test
where id >
(
 select isnull(max(id),0)
 from 
  (
   select top 40 id from test order by id
  ) A
)
order by id

原理:先查詢前40條記錄,然后獲得其最id值,如果id值為null的,那么就返回0,然后查詢id值大于前40條記錄的最大id值的記錄。這個(gè)查詢有一個(gè) 條件 ,就是 id必須是int類型 的。

方式3:

select top 10 *
from 
(
 select row_number() over(order by id) as rownumber,* from test
) A
where rownumber > 40

原理:先把表中的所有數(shù)據(jù)都按照一個(gè)rowNumber進(jìn)行排序,然后查詢r(jià)ownuber大于40的前十條記錄

這種方法和oracle中的一種分頁方式類似,不過只支持2005版本以上的

方式4:

存儲(chǔ)過程查詢創(chuàng)建存儲(chǔ)過程

alter procedure pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @temp=@pageSize*(@page - 1)
begin
 select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id
end
執(zhí)行存儲(chǔ)過程
exec 10,5

3、oracle分頁查詢

方式1:

根據(jù)ROWID來分

select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from
t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;

執(zhí)行時(shí)間0.03秒

方式2:

按分析函數(shù)來分

select * from (select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;

執(zhí)行時(shí)間1.01秒

方式3:

按ROWNUM來分

select * from(select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000) where

rn>9980;執(zhí)行時(shí)間0.1秒

其中t_xiaoxi為表名稱,cid為表的關(guān)鍵字段,取按CID降序排序后的第9981-9999條記錄,t_xiaoxi表有70000多條記錄個(gè)人感覺1的效率最好,3次之,2最差

致謝:感謝您的耐心閱讀!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩午夜福利高清在线观看| 国产成人一区二区三区久久| 午夜视频在线观看日韩| 精品国产亚洲av成人一区| 很黄很污在线免费观看| 最新日韩精品一推荐日韩精品| 亚洲中文在线男人的天堂| 91亚洲精品国产一区| 久草精品视频精品视频精品| 欧美一级日韩中文字幕| 久久精品国产在热久久| 欧美三级大黄片免费看| 国产女同精品一区二区| 免费亚洲黄色在线观看| 中文字幕日韩一区二区不卡| 欧美亚洲三级视频在线观看| 日韩中文字幕人妻精品| 日本午夜乱色视频在线观看| 中文字幕亚洲人妻在线视频| 亚洲天堂久久精品成人| 亚洲中文字幕高清视频在线观看| 在线免费观看黄色美女| 国产欧美一区二区久久| 亚洲视频一区二区久久久| 一区二区三区日韩中文| 成人三级视频在线观看不卡| 亚洲精品成人福利在线| 国产中文字幕一区二区| 色偷偷偷拍视频在线观看| 日韩一区中文免费视频| 有坂深雪中文字幕亚洲中文| 亚洲熟妇中文字幕五十路| 日韩一区二区三区在线日| 久久热麻豆国产精品视频| 免费在线播放不卡视频| 国产亚洲成av人在线观看| 日本一区二区三区久久娇喘| 亚洲精品中文字幕一二三| 国产一级二级三级观看| 国产精品偷拍一区二区| 精品欧美日韩一二三区|