小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一種理想的大數(shù)據(jù)量分頁查詢方案

 WindySky 2009-07-16
本文旨在介紹一種對數(shù)據(jù)庫中的大數(shù)據(jù)量表格進(jìn)行分頁查詢的實現(xiàn)方法,該方法對應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器、查詢客戶端的cpu和內(nèi)存占用都較低,查詢速度較快,是一個較為理想的分頁查詢實現(xiàn)方案。
1.問題的提出
在軟件開發(fā)中,大數(shù)據(jù)量的查詢是一個常見的問題,經(jīng)常會遇到對大量數(shù)據(jù)進(jìn)行查詢的場景。常見的對大數(shù)據(jù)量查詢的解決方案有以下兩種:一、將全部數(shù)據(jù)先查詢到內(nèi)存中,然后在內(nèi)存中進(jìn)行分頁,這種方式對內(nèi)存占用較大,必須限制一次查詢的數(shù)據(jù)量。二、采用存儲過程在數(shù)據(jù)庫中進(jìn)行分頁,這種方式對數(shù)據(jù)庫的依賴較大,不同的數(shù)據(jù)庫實現(xiàn)機制不通,并且查詢效率不夠理想。以上兩種方式對用戶來說都不夠友好。
2.解決思路
通過在待查詢的數(shù)據(jù)庫表上增加一個用于查詢的自增長字段,然后采用該字段進(jìn)行分頁查詢,可以很好地解決這個問題。下面舉例說明這種分頁查詢方案。
一、在待查詢的表格上增加一個long型的自增長列,取名為“queryId”,mssql、sybase直接支持自增長字段,oracle可以用sequence和trigger來實現(xiàn)。然后在該列上加上一個索引。添加queryId列的語句如下:
Mssql: [QUERYID] [bigint] IDENTITY (1, 1)
Sybase: QUERYID  numeric(19)  identity www.
Oracle:
CREATE SEQUENCE queryId_S
         INCREMENT BY 1
         START WITH 1
            MAXVALUE 999999999999999 MINVALUE 1
            CYCLE
            CACHE 20
            ORDER;
CREATE OR REPLACE TRIGGER queryId_T BEFORE INSERT
             ON "test_table"
             FOR EACH ROW
BEGIN
      select queryId_S.nextval into :new.queryId from dual;
END;
二、在查詢第一頁時,先按照大小順序的倒序查出所有的queryId,語句如下:select queryId from test_table where + 查詢條件 +order by queryId desc 。因為只是查詢queryId字段,即使表格中的數(shù)據(jù)量很大,該查詢也會很快得到結(jié)果。然后將得到的queryId保存在應(yīng)用服務(wù)器的一個數(shù)組中。 字串9
三、用戶在客戶端進(jìn)行翻頁操作時,客戶端將待查詢的頁號作為參數(shù)傳遞給應(yīng)用服務(wù)器,服務(wù)器通過頁號和queyId數(shù)組算出待查詢的queyId最大和最小值,然后進(jìn)行查詢。
算出queyId最大和最小值的算法如下,其中page為待查詢的頁號,pageSize為每頁的大小,queryIds為第二步生成的queryId數(shù)組:
        int startRow = (page - 1) * pageSize;
        int endRow = page * pageSize - 1;
        if (endRow >=queryIds.length)
        {
            endRow = this.queryIds.length - 1;
        }
        long startId =queryIds[startRow];
        long endId =queryIds[endRow];
查詢語句如下:
String sql = "select * from test_table" + 查詢條件 + "(queryId <= " + startId + " and queryId >= " + endId + ")";
字串7
3.效果評價
該分頁查詢方法對所有數(shù)據(jù)庫都適用,對應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器、查詢客戶端的cpu和內(nèi)存占用都較低,查詢速度較快,是一個較為理想的分頁查詢實現(xiàn)方案。經(jīng)過測試,查詢4百萬條數(shù)據(jù),可以在3分鐘內(nèi)顯示出首頁數(shù)據(jù),以后每一次翻頁操作基本在2秒以內(nèi)。內(nèi)存和cpu占用無明顯增長。
 
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/sytigeryhl/archive/2009/03/19/4003623.aspx

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多