各大資料庫分段查詢技術的實現方式

大家讲道理
發布: 2016-11-12 10:37:40
原創
3396 人瀏覽過

資料庫分段查詢技術的實作


    分段查詢的意思是,在查詢資料時不是一次性全部將附合條件的資料都讀取在記憶體裡。一次將資料全部查詢出來,將降低查詢效率,給客戶端的反應會很長時間,而分段查詢的意思是按照當前分頁的大小,每次查詢的結果就是每頁顯示的數量,大大提升了查詢效率

例如資料庫中有100000條數據,每頁20條,當點擊頁碼的時候,只查詢該頁碼需要顯示的那20條內容,不查詢別的頁面的,即每次只查詢20條數據

  SQL Server

從資料庫表中的第M筆記錄開始取N筆記錄,利用Top關鍵字:注意如果Select語句中既有top,又有order by,則是從排序好的結果集中選擇:

SELECT *

FROM ( SELECT Top N *
FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2
Order by 主键 asc
登入後複製

例如從表Sys_option(主鍵為sys_id)中從10筆記錄還是檢索20個記錄,語句如下:

SELECT *
FROM ( SELECT TOP 20 *
 FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2
Order by sys_id asc
登入後複製

檢索N筆記錄

SELECT *
FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
where t2.r >= M
登入後複製

例如從表Sys_option(主鍵為sys_id)中從10筆記錄還是檢索20筆記錄,語句如下:

SELECT *
FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
Where t2.R >= 10
登入後複製

MySQLsql

IT

My 資料庫最簡單,是利用程式碼,LIMIT [offset,] rows從資料庫表中M筆記錄開始檢索N筆記錄的語句為:


以下是程式碼片段:

SELECT * FROM 表名称 LIMIT M,N
登入後複製

例如從表Sys_option(主鍵為sys_id)中從10筆記錄還是檢索20筆記錄,語句如下:

以下是程式碼片段:

select * from sys_option limit 10,20
登入後複製

 以前用ORACLE時,分頁使用ROWNUM做條件就可以了,不管效率如何,反正實現起來比較容易。

那麼ACCESS如何實現分頁功能呢?我看了一些資料說得有些複雜,要寫好程式碼,我想到一個好方法,來跟大家分享,也就是一個SQL語句:

select top 15 * from YOURTABLE where ID not in(select top 15 ID from YOURTABLE order by ID desc)  order by ID desc

稍解釋一下,15呢是每頁的行數,YOURTABLE是表名,ID是表中主鍵字段(當然你也可以用別的),我上面的SQL語句,是取出第二頁(第二個15筆)記錄。想變頁碼,只要把後面的15變成對應的倍數就可以了。

  用這種方式,結合不含分頁功能的DataRepeater插件,我三下五除二就寫好的記事本程式。不要笑話我,我的.NET的新手,先寫這個練練手。

  如果有人有興趣,請留言,我可以把程式碼貼出來。


  請注意:


  如果取第一個15筆記錄,SQL語句不能這樣寫:

  select top 15  *  from YOURTABLE where ID not in(select top 0 ID from YOURTABLE order by ID desc)  order by ID desc
登入後複製

  這樣寫會報錯。直接寫成:

select top 15  *  from YOURTABLE   order by ID desc
登入後複製

  如果要加限制條件,可以這樣寫:

select top 15  *  from YOURTABLE where ID not in(select top 15 ID from YOURTABLE where  NAME=&#39;wallimn&#39; order by ID desc) and NAME=&#39;wallimn&#39;  order by ID desc
登入後複製
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板