問題解決再追加100分sqlserver儲存過程實現查

時間 2021-12-22 17:07:41

1樓:匿名使用者

按說5-8w這樣數量級的資料沒有問題,寫入excel是布比較耗效能,主要還是要通過優化寫入excel的**效率上去考慮。你可以考慮利用分批查詢寫入的方式來避免一次寫太多的資料到excel:將你的查詢結果分段,比方你的語句中能不能用時間來認為分段,每次返回部分結果。

回到你的問題,對大資料量查詢的解決方案有以下兩種:

(1)、將全部資料先查詢到記憶體中,然後在記憶體中進行分頁,這種方式對記憶體佔用較大,必須限制一次查詢的資料量。

(2)、採用儲存過程在資料庫中進行分頁,這種方式對資料庫的依賴較大,不同的資料庫實現機制不通,並且查詢效率不夠理想。以上兩種方式對使用者來說都不夠友好。

2.解決思路

通過在待查詢的資料庫表上增加一個用於查詢的自增長欄位,然後採用該欄位進行分頁查詢,可以很好地解決這個問題。下面舉例說明這種分頁查詢方案。

(1)、在待查詢的**上增加一個long型的自增長列,取名為「queryid」,mssql、sybase直接支援自增長欄位,oracle可以用sequence和trigger來實現。然後在該列上加上一個索引。

新增queryid列的語句如下:

mssql: [queryid] [bigint] identity (1, 1)

sybase: queryid numeric(19) identity

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;

(2)、在查詢第一頁時,先按照大小順序的倒序查出所有的queryid,

語句如下:select queryid from test_table where + 查詢條件 +order by queryid desc 。

因為只是查詢queryid欄位,即使**中的資料量很大,該查詢也會很快得到結果。然後將得到的queryid儲存在應用伺服器的一個陣列中。

(3)、使用者在客戶端進行翻頁操作時,客戶端將待查詢的頁號作為引數傳遞給應用伺服器,伺服器通過頁號和queyid陣列算出待查詢的queyid最大和最小值,然後進行查詢。

算出queyid最大和最小值的演算法如下,其中page為待查詢的頁號,pagesize為每頁的大小,queryids為第二步生成的queryid陣列:

int startrow = (page - 1) * pagesize

int endrow = page * pagesize - 1;

if (endrow >=queryids.length)

long startid =queryids[startrow];

long endid =queryids[endrow];

查詢語句如下:

string sql = "select * from test_table" + 查詢條件 + "(queryid <= " + startid + " and queryid >= " + endid + ")";

3.效果評價

該分頁查詢方法對所有資料庫都適用,對應用伺服器、資料庫伺服器、查詢客戶端的cpu和記憶體佔用都較低,查詢速度較快,是一個較為理想的分頁查詢實現方案。經過測試,查詢4百萬條資料,可以在3分鐘內顯示出首頁資料,以後每一次翻頁操作基本在2秒以內。記憶體和cpu佔用無明顯增長。

以上也僅僅是分頁查詢結果檢視的問題,你需要寫入到excel的話還需要考慮excel寫入**的執行效率,這部分是很值得研究的。

2樓:匿名使用者

可採用row_number的方式來實現。

如表中資料如下:

id          name

s1           張三

s3           李四

s5           王五

s7           趙六

s9           孫七

s11         楊八

如果要分頁,只需要在查詢中帶上行號即可。

select id,name,row_number() over (order by id) rn from 表名

最後結果:

id          name   rns1           張三    1

s3           李四    2

s5           王五    3

s7           趙六    4

s9           孫七    5

s11         楊八    6

這樣就完全滿足了分頁需求。

3樓:匿名使用者

分頁呀,用rownumber

4樓:成鑫偉

用dataset取出資料,用linq分頁

仙4不能啟動的問題(解決問題200分奉上)

這是由於防拷與系統軟體衝突導致無法過防拷。先看看最近新裝的軟體是否與防拷衝突,比如軟體中附帶的外掛等,解除安裝有衝突的軟體,由於是卡卡上網助手 虛擬光碟機軟體。也有可能是登錄檔檔案的問題,點 開始選單 在 執行欄 中輸入regedit 然後找個仙4的註冊檔案。hkey local machine s...

電腦常見問題解決方法

炫瘋奇 這樣的情況,電腦遇到問題,只要不是硬體問題,那麼可以通過重灌系統解決,不管什麼問題都可以通過重灌系統徹底解決的 常見電腦硬體故障有哪些?如何解決? 天寂無痕 一 cpu故障 1 cpu與主機板 沒有接觸好 當cpu與主機板cplj插座接觸不良時,往往會被認為是cpu燒燬。這類故障很簡單,也很...

自由光燒機油問題解決了嗎

鈦 資訊 jeep的發動機不分排量前期保養用錯機油都會燒,主要問題出在jeep發動機使用的0w20機油導致的,0w20本身機油較稀,在高溫時要求建立足夠的油膜強度,只有全合成的0w20才可以達到這個要求,這裡的全合成是指使用四類基礎油調的。還有現在很多jeep的渦輪增壓發動機對機油的高溫保護要求更高...