2014-09-04 37 views
0

因此,我正在閱讀Oracle數據庫10g的Ian Abramson初學者指南(來自使用mysql),它提到了PL/SQL並給出了使用它的所有這些重要理由,但是我正在這樣做準備重寫我公司使用的幾個應用程序。PLSQL中的表操作比在外部應用程序中運行效率更高嗎? (Oracle 10g)

我的程序員認爲,如果PL/SQL在數據庫訪問方面效率不高,所有解析和查詢都應該在客戶端程序上完成,以將負載從Oracle服務器中分散出去。我認爲我們應該劃分代碼並嘗試避免代碼重複,PL/SQL可以幫助我們做到這一點。我們並沒有真正知道(而且這本書沒有告訴我們),PL/SQL中的數據庫訪問的效率是如何在不同的機器上運行的應用程序上運行的,而這個機器會產生3-5(較大的)每個操作的查詢。我認爲它更可能運行得更快,因爲(據我所知)pl/sql函數存儲並保存它們的執行計劃,並且傳統的網絡開銷將減少3-5倍(取決於查詢的數量)

回答

3

這是一個不平凡的問題,並且可能會受到應用程序設計的影響。一般來說,如果你可以用SQL來完成,那麼用SQL來完成。如果你不能用SQL來完成,那麼用PL/SQL來完成。如果你不能在PL/SQL中完成,那麼在Java中(在數據庫中)執行它。如果這不起作用,請在外部客戶端代碼中進行。

現在,這不是通用的。如果你沒有做與數據庫相關的事情,那麼在客戶端做它是有意義的。如果它的CPU密集度很高,並且在客戶端使用它很有意義,那麼很好。原因在於,您需要花大筆錢才能獲得Oracle許可,而且您可能(可能)需要爲每個CPU付費。因此,如果您在獲得Oracle許可的CPU上進行了許多與數據庫無關的工作,則這非常昂貴。總之,如果它是與數據庫相關的實際代碼(插入/更新/刪除/選擇),即使它周圍有一些非平凡的邏輯,將它放入數據庫也是有意義的。如果它實際上沒有與數據庫交互,那麼它可能不屬於數據庫。

最後,您對PL/SQL代碼效率的評論是真實的。在解析和存儲執行計劃方面有效率的PL/SQL。另外,PL/SQL將自動預取數據。關於PL/SQL的優點

瞭解更多信息可以在這裏找到: http://docs.oracle.com/database/121/LNPLS/overview.htm#LNPLS00101

希望有所幫助。

+0

我知道我可能在這裏要求更多的意見,但是,如果我正在處理一個查詢,如「Get A,如果A.property,得到B,如果B.Property,得到C ..」 (它實際上是對同一個表的遞歸操作,我看到的遞歸的最高級別是5,但這並不意味着它不可能是無限的),最好是儘可能多地在pl/sql中運行由於減少往返時間/緩存執行計劃,還是將過度檢查放在客戶端應用程序中更好? – Sidney 2014-09-04 14:31:06

+0

不知道你在做什麼,因爲「如果a.property,得到b,如果b.property ...」實際上不是SQL查詢。另外,不確定你的意思是「過度檢查」......? – 2014-09-04 15:00:18

+0

啊,對不起,我正在試圖解決一個冗餘的過程。我們有一個有一些遞歸索引的表。例如,客戶端應用程序中的邏輯結構類似於「While(A.next不是0)從數據庫檢索B,將A設置爲B」。重複檢查以查看A.next是否爲0,並重複查詢以從數據庫中獲取B.我想知道是否這樣的邏輯不會更好地在PL/SQL中實現。 – Sidney 2014-09-04 15:03:24

相關問題