基於MSSQLSQL資料庫大批次資料的分塊分頁查詢
/*
create table tmp
(
gdate datetime default getdate(),
gid int
)
*/
/*
declare @i int
set @i = 1
while @i<1000000
begin
INSERT tmp(gid) values(@i)
print '-------' + cast(@i as char(10))
set @i = @i + 1
end
select count(*) from tmp
*/
-------------------------------
--@page 需要取出第幾頁
--@pageSize 用於分頁時,每頁顯示的記錄數目
--@blockSize 在大批次資料庫中不必每次取pageSize條記錄,每次取一批資料,減輕資料庫負擔
declare @page int,@pageSize int,@sql char(300),
@blockSize int,@d datetime
set @page = 100000
set @blockSize = 400
set @pageSize = 20
if @page =1
begin
set @sql = 'select top ' + cast(@blockSize as varchar) +
' * from tmp order by gdate desc '
end
else
begin
set @sql =
'select top '
+
cast(@blockSize as varchar)
+
' *
from tmp
where gdate<
(select min(gdate) from
(
select top '
+
cast((@page - 1)* @pageSize as varchar)
+
' gdate from tmp order by gdate desc
) as t
)
order by gdate desc'
end
print @sql
set @d=getdate()
exec(@sql)
select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())
--select * from t where gid<50000 order by gdate desc
使用者先根據上面的程式碼新建一個表tmp
我在實際應用中為測試效率問題,因此插入了1KW條記錄進行效率考驗
根據實際測試,效率還非常高,使用者在實際應用中可參考或應用上面的程式碼。不過沒有考慮到併發使用者訪問資料庫情況。
原理:主要是分塊取資料,上面程式碼中我每次取400條記錄,根據時間排序取資料(最近原則),頁面大小和頁使用者可指定。
關於在不同環境下測試,耗時就不必貼出了。
有疑問或者有其它更好的建議,請跟貼。
create table tmp
(
gdate datetime default getdate(),
gid int
)
*/
/*
declare @i int
set @i = 1
while @i<1000000
begin
INSERT tmp(gid) values(@i)
print '-------' + cast(@i as char(10))
set @i = @i + 1
end
select count(*) from tmp
*/
-------------------------------
--@page 需要取出第幾頁
--@pageSize 用於分頁時,每頁顯示的記錄數目
--@blockSize 在大批次資料庫中不必每次取pageSize條記錄,每次取一批資料,減輕資料庫負擔
declare @page int,@pageSize int,@sql char(300),
@blockSize int,@d datetime
set @page = 100000
set @blockSize = 400
set @pageSize = 20
if @page =1
begin
set @sql = 'select top ' + cast(@blockSize as varchar) +
' * from tmp order by gdate desc '
end
else
begin
set @sql =
'select top '
+
cast(@blockSize as varchar)
+
' *
from tmp
where gdate<
(select min(gdate) from
(
select top '
+
cast((@page - 1)* @pageSize as varchar)
+
' gdate from tmp order by gdate desc
) as t
)
order by gdate desc'
end
print @sql
set @d=getdate()
exec(@sql)
select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())
--select * from t where gid<50000 order by gdate desc
使用者先根據上面的程式碼新建一個表tmp
我在實際應用中為測試效率問題,因此插入了1KW條記錄進行效率考驗
根據實際測試,效率還非常高,使用者在實際應用中可參考或應用上面的程式碼。不過沒有考慮到併發使用者訪問資料庫情況。
原理:主要是分塊取資料,上面程式碼中我每次取400條記錄,根據時間排序取資料(最近原則),頁面大小和頁使用者可指定。
關於在不同環境下測試,耗時就不必貼出了。
有疑問或者有其它更好的建議,請跟貼。
相關文章
- Oracle資料庫中的分頁查詢Oracle資料庫
- 關於批次分頁查詢
- 百億級資料 分庫分表 後怎麼分頁查詢?
- 資料庫全表查詢之-分頁查詢優化資料庫優化
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- 如何分頁顯示資料庫查詢結果?資料庫
- 流式查詢1. mybatis的遊標Cursor,分頁大資料查詢MyBatis大資料
- 資料庫分類統計、分組查詢資料庫
- mysql資料庫查詢時用到的分頁方法有哪些MySql資料庫
- MySql、SqlServer、Oracle 三種資料庫查詢分頁方式MySqlServerOracle資料庫
- 批次分頁查詢問題?
- MongoDB之資料查詢(分頁顯示)MongoDB
- oracle 資料分頁查詢 (轉貼收集)Oracle
- 分庫資料如何查詢統計
- 關於資料庫批次查詢的一個想法資料庫
- 百億級資料分表後怎麼分頁查詢?
- 大資料資料庫讀寫分離分庫分表大資料資料庫
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- access資料庫大資料量分頁的問題資料庫大資料
- elasticsearch查詢之大資料集分頁效能分析Elasticsearch大資料
- 分庫分表後的分頁查詢
- 請教批次分頁查詢的問題
- 基於代理的資料庫分庫分表框架 Mycat實踐資料庫框架
- 基於Sql server資料庫的四種分頁方式總結SQLServer資料庫
- SQL Server:基於WEB的資料庫查詢SQLServerWeb資料庫
- SQL - 常用資料庫分頁SQL資料庫
- 海量資料庫的查詢優化及分頁演算法方案資料庫優化演算法
- MySQL 千萬資料庫深分頁查詢優化,拒絕線上故障!MySql資料庫優化
- javaee導測(ssh框架)分頁 mysql資料庫(帶條件查詢)Java框架MySql資料庫
- 資料庫分組查詢最大值的問題資料庫
- 海量資料庫的查詢優化及分頁演算法方案(轉)資料庫優化演算法
- SQL Server中基於WEB的資料庫查詢SQLServerWeb資料庫
- 【資料結構】折半查詢(二分查詢)資料結構
- 關於黑馬旅遊網的實現 --- 分頁查詢功能,點選分頁碼不顯示資料
- 當查詢的資料來自多個資料來源,有哪些好的分頁策略?
- mysql大資料量分頁查詢方法及其優化MySql大資料優化
- 資料庫資料的查詢----連線查詢資料庫
- JSP怎樣將查詢的資料實現分頁操作JS