曾經維修一些老系統,查詢乙個報表,在漫長的等待之後,仍然出來不來結果,而客戶端往往是單執行緒的,這段時間使用者只能等的乾瞪眼,做不了任何其它的事情,即使讓人暴躁如雷,但仍然只能忍受。
客戶將查詢慢的問題投訴過來,處理的工程師往往發現查詢的儲存過程寫的太爛,其實查詢的資料量並不大,演算法也並不如何的複雜,但結果硬是讓爛儲存過程給害了。往往對爛儲存過程進行優化以後,原來執行需要30分鐘,現在可能就只需要幾秒鐘。
寫出好的儲存過程,其實是有規可循的。演算法無非是時空轉換,要寫出執行快速的儲存過程,就要盡量地空間(記憶體空間)換時間(cpu處理時間)。對儲存過程來說,快取往往就是臨時表。在臨時表中建立必需要用到的字段,多餘的字段乙個也不要。然後定義嚴格的過濾條件從源表中將資料插入臨時表中。中間的計算處理都對臨時表進行,如果需要將處理結果更改回源表,再從臨時表中將資料更新回源表。這樣充分利用了記憶體空間而盡量地少占用cpu的處理時間。竊以為這就是撰寫儲存過程的道。
如何快速查詢某個儲存過程執行的狀況
通過下面的sql,我們可以快速檢視某個儲存過程執行的狀況 select top 100 db name d.database id as dbname,s.name as 儲存名稱,s.type desc as 儲存型別,d.cached time as sp新增到快取的時間,d.last exec...
C 如何執行儲存過程
以oracle為例,其它資料庫僅改變資料庫物件就可以。下面是帶引數的,不帶引數的話paramete為null即可。引數對應 public static int uploadstartclosesoftinfo string args return sdprovider.runprocedure 儲存...
C 如何執行儲存過程
以oracle為例,其它資料庫僅改變資料庫物件就可以。下面是帶引數的,不帶引數的話paramete為null即可。引數對應 public static int uploadstartclosesoftinfo string args oracleparameter parameter1 new or...