當前位置:首頁 » 存儲配置 » oracle存儲過程性能

oracle存儲過程性能

發布時間: 2022-11-28 23:58:32

⑴ oracle存儲過程有什麼好處

1。預編譯,已優化,效率較高。避免了sql語句在網路中傳輸然後再解釋的低效率。
2。如果公司有專門的DBA,寫存儲過程可以他來做,程序員只要按他提供的介面調用就好了。這樣分開來做,比較清楚。
3。修改方便。嵌入在程序中的SQL語句修改比較麻煩,而且經常不能肯定該改的是不是都改了。SQLSERVER上的存儲過程修改就比較方便,直接改掉該存儲過程,調用它的程序基本不用動,除非改動比較大(如改了傳入的參數,返回的數據等)。
4。會安全一點。不會有SQL語句注入問題。
當然,也有缺點。特別是業務邏輯比較復雜時,全用存儲過程來寫,估計也累的夠嗆。
■SQL存儲過程執行起來比SQL命令文本快得多。當一個SQL語句包含在存儲過程中時,伺服器不必每次執行它時都要分析和編譯它。
■調用存儲過程,可以認為是一個三層結構。這使你的程序易於維護。如果程序需要做某些改動,你只要改動存儲過程即可
■你可以在存儲過程中利用Transact-SQL的強大功能。一個SQL存儲過程可以包含多個SQL語句。你可以使用變數和條件。這意味著你可以用存儲過程建立非常復雜的查詢,以非常復雜的方式更新資料庫

⑵ 如何評價一個項目使用了大量的oracle存儲過程

強烈支持大量運用存儲過程,最好100%用。
效率高,用戶happy

  1. 存儲過程性能好
    2.存儲過程代碼可復用性好
    3.避免在程序中含有大量SQL,可移植性不好。

    這么多人在說用存儲過程的優點,那我就來說說缺點:
    1、移植性問題
    這個搞資料庫開發的人都能理解,是不是問題看系統的需求而定,這里就不多說了。如果資料庫要移植的話,用存儲過程就會帶來很多問題,最好不用。

    2、性能擴展性問題
    隨著系統訪問量的增長,系統必須進行不斷地升級擴展,特別對於大型系統而言,更重要的是性能可擴展性而不是局部的性能。J2EE等多層結構要解決的也是這方面的問題。
    處理邏輯如果全部放在存儲過程里,所有的處理都在資料庫伺服器上進行,消耗的就是資料庫伺服器的CPU資源,大家知道資料庫伺服器由於需要較高的可靠性,通常選用的都是價格昂貴的伺服器,對資料庫伺服器升級通常都花費很大。
    如果把處理邏輯放在中間層伺服器上進行,中間層伺服器一般都是小型的機器,價格便宜,而且中間層伺服器的CPU通常主頻比資料庫伺服器的速度還快(比如現在8CPU的資料庫伺服器主頻只有800M,而雙CPU的刀片式伺服器CPU主頻已經到2.8G了),而且對於多層架構,支持中間層伺服器可以增加多台機器進行負載均衡,用中間層伺服器即價格便宜,擴展空間也更大。

    3、開發問題
    存儲過程還是過程型語言,其重用性比不上JAVA等面向對象語言開發。用JAVA開發的中間層服務可服用性更好(當然,前提是你採用面向對象設計)


    上面只是列舉的一部分問題,這些問題就值的你好好考慮是否採用存儲過程了,我的觀點是存儲過程應該有選擇地使用,牽涉到批量數據操作的,用存儲過程較好。對於小數據量處理的事務操作,應放到中間層處理,這樣系統的移植性和擴展性更好

⑶ oracle用包還是用存儲過程比較好,性能上有什麼區別

包和存儲過程是兩個不同的概念。
包可以理解成類似面向對象語言中的命名空間,而存儲過程可以放到包內,這樣管理比較方便,而且不會有命名沖突的問題。包內還可以有函數,類型定義等等其他內容。
當然,存儲過程可以不放到任何包內的。

⑷ oracle存儲過程效率問題,存儲過程,每分鍾1千條數據,有44多萬數據,怎麼樣能執行速度快

建議你找找有關提高語句效率的方法,將有些語句調整調整,比如將確定的且篩選數據比較厲害的條件向後靠,同時增加一些索引,另外寫法上調整一下,例如,既然count出來 V_COUNT不是一條就不要取 V_SERV_ID 到變數中了,直接返回失敗.

另外 SELECT T.ID INTO V_ID FROM rms.SS_MODULE T WHERE T.SS_ID = (SELECT T.ID FROM DEVICE T WHERE T.NAME = (SELECT T.DEVICE_NAME FROM SOFT_SWITCH_TABLE T WHERE T.DEVICE_NAME IS NOT NULL)) AND T.CODE = V_CODE; 這個語句中好多T 我都不知哪個欄位是哪個表的

⑸ oracle存儲過程有什麼好處

你應該問資料庫存儲過程有什麼好處存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。x0dx0a* 可保證數據的安全性和完整性。x0dx0a# 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。x0dx0a# 通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。x0dx0a* 在運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執行。x0dx0a* 可以降低網路的通信量。x0dx0a* 使體現企業規則的運算程序放入資料庫伺服器中,以便:x0dx0a# 集中控制。x0dx0a# 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可以了,應用程序無須任何變化。

⑹ ORACLE 存儲過程是什麼 它的用處,好處是什麼概念性的東西多點。。

定義:存儲過程(Stored Procere )是一組為了完成特定功能的SQL 語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。
存儲過程是由流控制和SQL 語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。在ORACLE 中,若干個有聯系的過程可以組合在一起構成程序包。
優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update、Insert、Query、Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某用戶才具有對指定存儲過程的使用權。

簡單說,你在你的機器上寫了個存儲過程,這個存儲過程像那些表裡的數據一樣被放在遙遠的資料庫伺服器當中,但是它又是可執行的代碼,其他能連到資料庫伺服器的用戶,可以調用你寫的存儲過程
它的作用是隱藏細節,就是說,你寫的存儲過程代碼可能很復雜,但是其他人調用它卻很簡單,不用具體知道它是如何做的,且一次能完成多個指令

oracle有系統存儲過程和自定義存儲過程2種存儲過程。
系統存儲過程就是由oracle預先提供的一組完成特定功能的存儲過程,安裝完oracle就有了。
自定義存儲過程就是存在oracle資料庫里由一組plsql語句組成的自定義過程(procere)。它可以供其它oracle自定義存儲過程、自定義函數和job調用或者由客戶端程序調用。

⑺ oracle函數和存儲過程有什麼區別

一、主體不同

1、函數:當需要分析數據清單中的數值是否符合特定條件時,使用資料庫工作表函數。

2、存儲過程:是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,存儲在資料庫中,一次編譯後永久有效。

二、特點不同

1、函數:只能返回一個變數,可以嵌入sql中和存儲過程中使用。

2、存儲過程:用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行。存儲過程是資料庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升。


三、功能不同

1、函數:不能用臨時表,只能用表變數,函數不能執行一組修改全局資料庫狀態的操作。可以作為查詢語句的一個部分來調用,由於函數可以返回一個表對象,所以在查詢中位於from關鍵字後面。

2、存儲過程:存儲過程需要讓sql的query可以執行,存儲過程可以返回參數,如記錄集。sql語句中不可以含有存儲過程。


⑻ oracle存儲過程效率問題,處理1500w的數據插入

處理大批數據的時候,游標對逐行處理會很慢,而且你的寫法,commit在循環中,也會很慢。
其實你的功能可以用一個不循環的語句解決。
假設你定義游標的語句是(假設你的源數據表名為test):
select rpt.a,rpt.b,rpt.c,rpt.zy,rpt.zc,rpt.zd,rpt.zr,rpt.df from test rpt;
你的功能可以用以下語句解決:
insert into targ@dc_link (a,b,c,bianma,)
select rpt.a,rpt.b,rpt.c,'0'||num,decode(num,1,rpt.zy,2,rpt.zc,3,rpt.zd,4,rpt.zr,5,rpt.df) from test rpt,(select rownum num from test where rownum<6);
commit;

這樣的好處是語句和commit都只有一個,會快很多。

如果覺得有幫助,請採納:)

⑼ 現在oracle在實際運用中存儲過程用的多嗎

這個是必須使用的,我們公司的項目中就使用到了
*1) 存儲過程幫助在資料庫層聚集T-SQL代碼。嵌入即席SQL的網站或應用程序在應用環境下很難修改,當即席SQL嵌入在應用程序內的時候,你可能會花費太多時間試圖找到和調試嵌入的SQL。-- 一旦找到了bug,你可能就需要重新編譯可執行程序,引起不必要的應用程序臨時停止或痛苦的應用程序部署。如果把T-SQL集中到存儲過程中去,-- 你就只需要集中在一個地方來查詢SQL代碼或SQL批處理。如果你能正確地為代碼建立文檔並對代碼標准化,存儲過程就會提升整個應用程序的可支持性。

-- *2) 存儲過程幫助大的即席查詢減少網路流量。編寫應用程序調用而不是500行的SQL調用來執行存儲過程,對網路以及應用程序的性能有正面影響,特別是當調用在一分鍾內重復數千次時。

-- *3) 存儲過程促進代碼的可利用性。例如,如果你的網站應用程序使用一個下拉菜單來包含一組城市,並且這個下拉菜單用於很多網頁,-- 你可以在每個頁面調用存儲過程而不是在多個地方嵌入相同的SQL。

-- *4) 存儲過程淡化數據獲取的方法。如果你修改了提供源數據的基本表,存儲過程(和視圖相似)能讓應用程序對這個修改透明。這樣就不需要修改應用程序底層的代碼就能修改。-- 你可以把老的表換成新的,而且只要同樣的列和數據類型返回給應用程序,則應用程序完全不知情。

-- *5) 與視圖不同,存儲過程可以利用流控制技術、臨時表、表變數等。

-- *6) 存儲過程對查詢響應時間的影響比較穩定。如果你使用大量的即席查詢,可能會注意到有時候從查詢中返回結果所花的時間變化很大

⑽ oracle存儲過程有什麼好處

好處1:
存儲過程裡面的代碼, 都是已經被 「編譯」 過的了。 直接可以執行。
如果不是存儲過程,那麼你每次執行代碼, 都要再編譯。

好處2:
減少網路流量。
假如你的存儲過程,是要分別檢索幾個大的表,然後作復雜的計算,最後產生一個小的匯總結果。
如果全部在客戶端處理,那麼會有大量的數據,從伺服器傳遞到客戶端。 然後客戶端將多個 大的結果集合,處理成一個小的匯總集合。
如果用存儲過程,那麼這些網路上傳遞的數據,將僅僅包含那個小的匯總集合。

熱點內容
編程貓前端 發布:2025-09-23 06:03:09 瀏覽:870
wampphp下載 發布:2025-09-23 06:01:54 瀏覽:555
網路存儲25 發布:2025-09-23 05:56:53 瀏覽:586
c語言敲代碼 發布:2025-09-23 05:55:25 瀏覽:732
協方差運演算法則 發布:2025-09-23 05:09:46 瀏覽:389
java數組靜態初始化 發布:2025-09-23 05:06:51 瀏覽:554
創建存儲函數的關鍵詞是 發布:2025-09-23 04:37:33 瀏覽:942
easyui框架源碼 發布:2025-09-23 04:28:52 瀏覽:478
啪啪游戲廳存儲位置 發布:2025-09-23 04:06:01 瀏覽:982
光遇伺服器人數過多怎麼辦 發布:2025-09-23 03:59:20 瀏覽:444