大批次引數輸入查詢處理

JurnZhou發表於2007-06-15
我是電信的,原來公司有一套PB開發的系統,現轉成Web模式。使用的部門很不講理,很多時候要以原PB系統的執行速度和Web模式的作比較。所以只有最佳化,別無選擇。

現有一令小弟頭疼的問題望能解決:

有一張全市的話費表約1400萬條資料。裡面有200萬個號碼。
有兩個欄位:
號碼 話費帳目項
110 本地話費
110 長途話費
112 本地話費

現在要對錶進行報表統計。

要一次過輸入6000至8000個號碼,在這張表找出對應的號碼。

要知道 oracle in的最大數為1000個,所以當初我用or in(“前1000個號碼”)+or in(1000至1999的號碼)的方法拼成sql語句執行。

當輸入的電話數為4000左右的話,輸出的結果是4000*該批號碼對應帳目項可能就是40000條記錄,我用了分頁的方式執行4000條號碼的查詢,只要5秒內就能出結果。

當中包含的外表關聯就不說了,總之1000至2000的批次輸入是很快的基本和PB的速度一樣,而且經過壓力測試可以多併發。

但使用的部門叼,一次輸入個6、7000個。搞到oracle出現個share_pool錯誤。估計是sql拼起來過長所致,叫他們分開錄入,他們就以PB那套系統,6000、70000三秒就搞定了。而且是全部結果都顯示出來了。然後說:“我要的就是這樣的速度”,我都欲哭無淚。但領導也要求這樣。

所以只能考慮用中間表了,但多使用者操作報表查詢的話,要怎樣解決呢??



相關文章