大數據分頁查詢
Ⅰ sqlserver2000 如何提高分頁查詢大數據量的效率
sqlserver2005及以上的版本有row_number()函數可以高效分頁,sqlserver2000的話只能看演算法了
Ⅱ 大數據量查詢並分頁顯示問題
對於大量的數據 分頁的時候,我們可以按需取數據。
行得到記錄 總數 , Rscount,
然後 根據自己需要設定的每頁顯示的記錄條數, 如 12條
再計算 可以分成多少頁 Pagecount= Rscount/12
如果是第5頁, 則取第6頁的12條記錄,頁碼是可以用變數的,如PageSize 每次給不同的頁值。
select top 12 * from 表 where Id not in(select top 5*12 Id from 表 order by id desc) order by Id desc
以此類推和 擴展。
20萬條記錄的資料庫 用access 太可憐了!
Ⅲ Oracle的極大數據量的分頁查詢問題
1.把星都換成需要的欄位名試一下。
2.索引順序排列正確(這個你查一下,索引不是建 了就可以。查詢時有順序的,四年前的項目,改變順序後,時間由35s 提升到6-8s,具體的記不清了,只記得有這么回事。)
回去以後試一下你的SQL,只有數據多才出現這個問題嗎?欄位長度大約都多少?
Ⅳ 網上很多人說oracle 11g在處理大數據分頁時用rowid比rownum效率快很多,求rowid和rownum分頁效率原理
rownum和rowid是兩種不同的東西,不知道你如何利用rowid來分頁?
rownum是返回的記錄編號。rowid可理解為返回記錄的實際地址。
當根據rowid訪問時相當於不經查詢直接取數,用rownum必須經過查詢(即資料庫里有查詢動作)。如果已經知道了rowid再去獲取數據和通過rownum計數去獲取數據,肯定用rowid快。
實際上,由於oracle不支持的真正的分頁查詢,所謂分頁,是先把數據從資料庫中查詢出來,然後再把對應頁的數據返回給調用者,剩餘的數據扔掉了。所以,這種情況下,註定用rowid不如用rownum快。
Ⅳ 一個比較實用的大數據量分頁存儲過程
一個比較實用的大數據量分頁存儲過程
create proc sp_PublicTurnPageWebSite( @TBName nvarchar(100)=『『, --表名,如 pinyin
@PageSize int=10, --每頁的記錄數,默認為 10
@CurPage int=1, --表示當前頁 1
@KeyField nvarchar(100)=『ID『, --關鍵欄位名,默認為 ID,該欄位要求是表中的索引 或 無重復和不為空的欄位
@KeyAscDesc nvarchar(4)=『ASC『, --關鍵字的升、降序,默認為升序 ASC , 降序為 DESC
@Fields nvarchar(500)=『*『, --所選擇的列名,默認為全選
@Condition nvarchar(200)=『『, --where 條件,默認為空
@Order nvarchar(200)=『『 --排序條件,默認為空
) with encryption as
BEGIN
if @TBName = 『『
begin
raiserror(『請指定表名!『,11,1)
return
end
if @PageSize <=0 or @CurPage <0
begin
raiserror(『當前頁數和每頁的記錄數都必須大於零!『,11,1)
return
end
if @KeyAscDesc = 『DESC『
set @KeyAscDesc = 『<『
else
set @KeyAscDesc = 『>『
if @Condition <> 『『
set @Condition = 『 where 『 + @Condition
一個比較實用的大數據量分頁存儲過程
declare @SQL nvarchar(2000) set @SQL = 『『
if @CurPage = 1
set @SQL = @SQL + 『SELECT Top 『 + cast(@PageSize as nvarchar(20)) + 『 『 + @Fields + 『 FROM 『 + @TBName + @Condition + 『 『 + @Order
else
begin
declare @iTopNum int
set @iTopNum = @PageSize * (@CurPage - 1)
set @SQL = @SQL + 『declare @sLastValue nvarchar(100)『 + char(13)
set @SQL = @SQL + 『SELECT Top 『 + cast(@iTopNum as nvarchar(20)) + 『 @sLastValue=『 + @KeyField + 『 FROM 『 + @TBName + @Condition + 『 『 + @Order + char(13)
declare @Condition2 nvarchar(200)
if @Condition = 『『
set @Condition2 = 『 where 『 + @KeyField + @KeyAscDesc + 『@sLastValue 『
else
set @Condition2 = 『 and 『 + @KeyField + @KeyAscDesc + 『@sLastValue 『
set @SQL = @SQL + 『SELECT Top 『 + cast(@PageSize as nvarchar(20)) + 『 『 + @Fields + 『 FROM 『 + @TBName + @Condition + @Condition2 + @Order
end
Ⅵ 如何解決大數據量的查詢問題
實際情況可能會這樣,表1有產品的名稱,表2沒有產品的名稱。所以如果在查詢中,版要包含表1中的欄位權的話,就要用到關聯,所以最好,將表1和表2都在ID上建索引。再關聯;如果不包含表1的話,只需給表2建索引。
根據這里的環境來看,走索引會比走全表掃描來的快些。
然後可以在SQLPLUS環境下,啟動跟蹤功能,查看這個語句的執行計劃情況
SQL優化方面,可以參考oracle性能調整方面的書籍
以上參考!
Ⅶ 求教大數據量查詢方案
分頁查抄詢一般 DBA 想到的辦法是在某個(如ID,create_time)欄位上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。
因為如果當 LIMIT 子句變成 「LIMIT 1000000,10」 時,你會抱怨:我只取10條記錄為什麼還是慢?
要知道資料庫也並不知道第1000000條記錄從什麼地方開始,即使有索引也需要從頭計算一次。出現這種性能問題,多數情形下是程序員偷懶了。在前端數據瀏覽翻頁,或者大數據分批導出等場景下,是可以將上一頁的最大值當成參數作為查詢條件的。SQL 重新設計如下:
SELECT *
FROM 表
WHERE create_time > '2017-07-04 09:00:00'
ORDER BY create_time limit 10;
這樣查詢時間基本固定,不會隨著數據量的增長而發生變化。
-
Ⅷ mysql數據量大時 怎麼分頁 比較快
分頁查詢復一般 DBA 想到的制辦法是在某個(如ID,create_time)欄位上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。
因為如果當 LIMIT 子句變成 「LIMIT 1000000,10」 時,你會抱怨:我只取10條記錄為什麼還是慢?
要知道資料庫也並不知道第1000000條記錄從什麼地方開始,即使有索引也需要從頭計算一次。出現這種性能問題,多數情形下是程序員偷懶了。在前端數據瀏覽翻頁,或者大數據分批導出等場景下,是可以將上一頁的最大值當成參數作為查詢條件的。SQL 重新設計如下:
SELECT *
FROM 表
WHERE create_time > '2017-07-04 09:00:00'
ORDER BY create_time limit 10;
這樣查詢時間基本固定,不會隨著數據量的增長而發生變化。
Ⅸ 對於多表關聯的,大數據分頁,怎麼整sql
SELECT*
FROM(SELECT查詢欄位,
ROW_NUMBER()OVER(ORDERBY排序欄位)ASNum
FROM表1a
INNERJOIN表2bONa.關聯欄位=b.關聯欄位
)t
WHEREt.NumBETWEEN10AND20
Ⅹ 大數據量 用rownum 分頁查詢 order by 會導致執行很慢, 怎麼辦
請查考這兩篇文章
《幾種分頁演算法》
http://blog.csdn.net/jww2002/articles/558151.aspx
《海量資料庫的查詢優化及分頁演算法方案》
http://blog.csdn.net/chenjinjie/archive/2007/05/28/1628355.aspx