SqlServer?多種分頁方式?詳解(含簡單速度測試)
SQLServer分頁方式
附帶50萬數(shù)據(jù)分頁時(shí)間[本機(jī)訪問|已重啟SQL服務(wù)|無其他程序干擾][非索引排序]
環(huán)境 WIN7 SQL服務(wù)12.04 SQL管理器SSMS14.01
1.Offset and Fetch 方式分頁
[SqlServer2012+] OFFSET 起始值 ROWS FETCH NEXT 每頁條數(shù) ROWS ONLY
1.分頁條件不能重復(fù),建議使用 分頁條件+主鍵 一起作為 分頁參數(shù)
2.分頁語句中 FIRST=NEXT ROWS=ROW
3.不使用排序可以用 order by (select 1)
使用 OFFSET FETCH 方式分頁必須帶order by key 其中key 必須是唯一值 不然會(huì)導(dǎo)致錯(cuò)誤
select * from ( select * from sysrizhi ) table_temp order by riqi desc,sysrizhiid desc offset 10 rows fetch next 10 rows only
50萬行執(zhí)行時(shí)間 770毫秒 索引排序10毫秒
select * from tcpliushui order by riqi OFFSET 100 ROWS FETCH NEXT 20 ROWS ONLY
2.row_number() 方式分頁
[SqlServer2005+] row_number()over(order by 已有排序字段)rownumber 然后根據(jù)rownumber篩選
使用方式
select * from (select *, ROW_NUMBER() Over( order by riqi desc,sysrizhiid desc ) as rowNum from ( select * from sysrizhi ) as table_1 ) as t where t.rowNum>10 and t.rowNum<=20
速度測試 50萬行執(zhí)行時(shí)間 774毫秒 索引排序10毫秒
select * from (select row_number()over(order by riqi)rownumber,* from tcpliushui )a where rownumber>100 and rownumber<121
速度測試 50萬行執(zhí)行時(shí)間 777毫秒 索引排序13毫秒
select top 20 * from (select row_number()over(order by riqi)rownumber,* from tcpliushui)a where rownumber>100
速度測試 50萬行執(zhí)行時(shí)間 775毫秒 索引排序15毫秒
select * from (select row_number()over(order by riqi)rownumber,* from tcpliushui)a where rownumber between 101 and 120
3.row_number()變種
不基于已有字段 [SqlServer2005+]
速度測試 50萬行執(zhí)行時(shí)間 779毫秒 索引排序15毫秒
select * from ( select row_number()over(order by tempColumn)rownumber,* from (select top 120 tempColumn=0,* from tcpliushui where 1=1 order by riqi)a )b where rownumber>100
4.not in/top方式分頁
速度測試 50萬行執(zhí)行時(shí)間 858毫秒 索引排序51毫秒
select top 20 * from tcpliushui where tcpliushuiid not in (select top 100 tcpliushuiid from tcpliushui order by riqi) order by riqi
5.not exists方式分頁
速度測試 50萬行執(zhí)行時(shí)間 852毫秒 索引排序22毫秒
select top 20 * from tcpliushui where not exists (select 1 from (select top 100 tcpliushuiid from tcpliushui order by riqi)a where a.tcpliushuiid=tcpliushui.tcpliushuiid) order by riqi
6.max/top方式分頁
速度測試 50萬行執(zhí)行時(shí)間 819毫秒 索引排序12毫秒
select top 20 * from tcpliushui where tcpliushuiid>(select max(tcpliushuiid) from (select top 100 tcpliushuiid from tcpliushui order by riqi)a) order by riqi
到此這篇關(guān)于SqlServer 多種分頁方式 (含簡單速度測試)的文章就介紹到這了,更多相關(guān)SqlServer 分頁方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL實(shí)現(xiàn)模糊查詢的四種方法小結(jié)
在SQL中,模糊查詢是一種通過匹配字符串中的一部分或關(guān)鍵字來查詢數(shù)據(jù)的方法,本文主要介紹了SQL實(shí)現(xiàn)模糊查詢的四種方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Navicat連接SQL?Server數(shù)據(jù)庫的詳細(xì)指南
Navicat是一款功能強(qiáng)大的數(shù)據(jù)庫管理工具,支持連接和管理SQLServer數(shù)據(jù)庫,本文詳細(xì)介紹了如何使用Navicat連接到SQLServer,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
SQL?Server數(shù)據(jù)庫之表的高級(jí)查詢
這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫之表的高級(jí)查詢的相關(guān)資料,高級(jí)查詢在數(shù)據(jù)庫中用得是最頻繁的,也是應(yīng)用最廣泛的,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
SQL?Server數(shù)據(jù)庫的三種創(chuàng)建方法匯總
新建數(shù)據(jù)庫是我們開始數(shù)據(jù)庫學(xué)習(xí)的重要一步,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫的三種創(chuàng)建方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
SQLServer導(dǎo)出sql文件/表架構(gòu)和數(shù)據(jù)操作步驟
只導(dǎo)出了數(shù)據(jù)庫的sql腳本,而表里的數(shù)據(jù)依然沒有導(dǎo)出來,接下來將為你解決這個(gè)問題,感興趣的看下教程哈2013-03-03

