簡體   English   中英

使用PHP循環執行SQL查詢

[英]SQL Queries in loops with PHP

因此,我最近接手了內部內容管理系統的維護,而數據庫優化並不是我真正的專長。

無論如何,當我查看代碼時,有幾件事掉到了我的眼前。

php代碼有點“意大利面加肉丸”,幾乎沒有注釋。

但是最大的事情是:據我所知,原始程序員決定放棄表聯接完全包含在數據庫代碼中(隱式和顯式)。

例如,以下是顯示頁面列的過程:

從數據庫中獲取元素列表對於每個元素,調用一個子例程以檢查顯示權限,如果成功,則調用另一個子例程以獲取該元素的html數據。

每個子例程有效地為每個元素調用一個單獨的查詢。 我認為,權限步驟涉及查詢兩個單獨的表。

目前,性能並不是真正的問題,也沒有要求我對此進行研究。 雖然頁面請求在我看來有點慢。

值得嘗試重寫SQL東西嗎? 我認為提高可維護性最終是值得的,並且如果將來可伸縮性成為一個問題,它將使我更輕松。

還是真的不像我想的那么糟糕? 也許我只是反應過度。 專家的意見將不勝感激。

如果要使將來的工作變得更輕松,我將在修復查詢之前開始重構意大利面條代碼。 一旦有了一個不錯的設計,它也應該更直接地說明如何集成(甚至消除)一些手動聯接。

重構是開發過程的重要組成部分。 忽略這一事實意味着將來會有更多問題。 問題的部分在於,沒有多少管理者了解連續重構的重要性。
我建議您閱讀Joshua Kerievsky的“重構為模式”,其中有許多很好的示例,說明了如何通過實施新的設計方法來安全地更改現有代碼。

關於SQL查詢的問題,它可能不是您需要更改的第一件事。

我認為在您有時間的時候值得重寫。 在出現問題之前,您不想拖延它。 我說,讓數據庫盡其所能。 在這種情況下,表聯接肯定會比循環中的多個查詢更好。

您的問題過於籠統,無法給出一個很好的答案,並且您也沒有針對您的特定情況提供足夠的信息來做出有根據的猜測。

需要考慮的事項:

系統會隨着時間增長嗎? 如何? 如果會有更多的用戶在線,則對系統的確定程度更高-則可能會引起警報。 設計不良的系統無法很好地擴展。

不好的代碼是一回事,但是不好的數據庫和一般的系統設計則更糟。 我認為關鍵可能是您對“未來幾年”的評論。 如果您打算長期使用該系統-那么認真看一下基礎知識是個好主意。 如果您的系統可能要用其他東西代替(內部CMS傾向於替換),那么您可以在購物時購買合適的東西。

但是就您的問題而言,請重寫一些問題,確保您的數據庫已規范化並重構了代碼。 告訴老板,如果您要堅持使用系統,這是正確的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM