2009-07-16 83 views
1

我正在使用PostgreSQL處理PHP Web應用程序。所有的SQL查詢都是從PHP代碼中調用的。我沒有看到任何視圖,函數或存儲過程。據我瞭解,它總是更好地使用這些數據庫子程序,因爲它們被存儲在數據庫中的優勢:PHP和數據庫:視圖,函數和存儲過程性能

  • 封裝
  • 抽象
  • 訪問權限(僅限於數據庫管理員)和責任
  • 避免編譯

我覺得我讀一些有關的性能改進了。我真的不明白爲什麼球隊還沒有使用這些。在這種特殊情況下,我想從經驗中知道,有沒有什麼理由不使用它們?

大多數情況下,當代碼中有很多「SELECT」查詢時,爲什麼不使用Views?

我正計劃重構代碼並開始編碼數據庫服務器上的子例程。我想知道贊成或反對的意見。該項目是相當大的(很多表),並期望大量的數據被存儲。您在社交網絡中擁有更多內容的數據量非常大。

回答

1

I.視圖提供封裝,但如果沒有仔細設計,它們可能會減慢應用程序。謹慎使用。
二,如果需要,使用函數,沒有理由在不需要的時候插入它們。三,存儲過程是天賜之物,到處都有靜態查詢使用它們!

在迴應的意見與查詢時,儘量使用與存儲過程的,視圖存儲過程的會減輕一些與意見所採取的性能損失。

+0

二,什麼時候會「需要」功能? – 2009-07-17 15:49:37

+0

當它不是業務邏輯,但需要邏輯來提取數據。 – WolfmanDragon 2009-07-17 16:45:14

3

在我看來,視圖和存儲過程通常只是額外的麻煩而沒有什麼好處。

我已經編寫並使用了一堆不同的web應用程序,儘管沒有任何用戶使用bazillions。具有存儲過程的程序很笨拙。具有臨時SQL查詢的人員很快(使用佔位符和其他最佳實踐來避免SQL注入)。我最喜歡使用數據庫抽象(ORM),因此您的代碼可以處理PHP類和對象,而不是直接與數據庫交互。我越來越多地轉向symfony框架。

另外:一般來說,你不應該過早地優化性能。現在優化快速開發(無需存儲過程)。在它工作之後,對您的應用進行基準測試,找出瓶頸並優化它們。當你嘗試從一開始就進行優化時,你只是浪費時間並且複雜化。

0

我們嘗試用你提到特性只有在那裏有顯著的好處

做「數據庫」,他們屬於「架構更改」,而不是
「的部分源代碼更改「,並且自然更難以進行版本控制。

無論您做什麼,只要確保您完全瞭解誰更改了什麼時間,以便在出現問題時能夠進行差異化,回滾和恢復。

+0

您可以輕鬆地將數據庫的表/視圖/過程定義提取到(a)文本文件中,然後將它們提交到版本控制。 – txwikinger 2009-07-16 19:41:43

1

存儲過程的優點是,因爲所有的處理都是在數據庫上完成的,所以不會產生網絡開銷來回分流中間結果集。

缺點是每個RDBMS系統都有自己獨特的存儲過程語法。通過在存儲過程中實現業務邏輯,幾乎將應用程序限制爲單個數據庫產品,如果您希望應用程序獨立於數據庫,則需要記住一些事項。另外,正如gahooa指出的那樣,由於存儲過程存在於數據庫中,因此作爲開發人員訪問它們可能會受到本地策略的限制;一些組織只會讓DBA接觸數據庫。

@WolfmanDragon:我不知道觀點是否固有地讓事情變慢;我想你的里程可能會有所不同,具體取決於視圖的複雜程度和您使用的RDBMS。另外,有些RDBMS允許您實現常用視圖,因此對基本表的訪問速度也很快。

相關問題