各大數據庫分段查詢技術的實現方式

數據庫分段查詢技術的實現


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

例如數據庫中有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

?Oralce數據庫

從數據庫表中第M條記錄開始檢索N條記錄

SELECT?*  FROM?(SELECT?ROWNUM?r,t1.*?From?表名稱?t1?where?rownum?=?M

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

SELECT?*  FROM?(SELECT?ROWNUM?R,t1.*?From?Sys_option?where?rownum?=?10

MySQL數據庫

My sql數據庫最簡單,是利用mysql的LIMIT函數,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='wallimn'?order?by?ID?desc)?and?NAME='wallimn'??order?by?ID?desc
? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享