2014-10-16 82 views
2

我有一個php應用程序顯示3個數據表,每個數據表都來自同一個MySQL表。每個記錄有一個整數字段命名爲狀態可以具有值1,2或3。表1示出了具有狀態的所有記錄= 1,表2示出了狀態= 2個表3示出了狀態= 3效率更高 - 多個SQL查詢或一個查詢和進程在PHP中?

爲了實現這三MySQL查詢可以使用WHERE運行,按狀態進行過濾,每次迭代一組結果以填充這三個表。

另一種方法是,從表中選擇所有,然後通過相同的結果集的一次爲每個表遍歷,使用PHP每次測試的狀態的值。

這些方法之一會比另一個更有效嗎?或者他們中的一個會被認爲比另一個更好?

+5

沒辦法說:基準測試方法和選擇最好的。運行較少的查詢幾乎總是一件好事,但如果將單一查詢轉化爲三個單獨集合所需的後處理過程很痛苦或涉及到,則可嘗試單獨查詢。 – 2014-10-16 14:37:19

+0

我會去得到所有的方法,並按狀態排序記錄。這樣只會執行一個查詢操作。但總是按照Marc B的建議進行基準測試。 – Barry 2014-10-16 14:37:29

+0

對於PHP數組函數可能比mysql更快的多個非常大的表,只有少數非常罕見的情況。但即使如此,它依賴於表,查詢和使用的指標。最好的方法是試着比較結果。 – ToBe 2014-10-16 14:43:53

回答

2

一般來說,最好是過濾的RDBMS側,從而可以減少數據的需要轉賬的金額。

從通過網絡PHP客戶端RDBMS服務器傳輸數據是不是免費的。網絡具有一定的容量,並且可以產生如此多的流量,從而成爲應用程序性能的一個限制。

比如,最近我幫誰正在運行的查詢每秒很多次,結果集的每個數據生成13MB的用戶。查詢可以在服務器上快速執行,但他們無法將數據提供給他的應用程序,因爲他僅僅耗盡了他的網絡帶寬。這是一個性能問題,在他的測試過程中沒有發生,因爲當他一次運行一個查詢時,這個問題在網絡容量內。

0

如果您使用第二種方法只連接數據庫一次,因此效率更高。 即使不是這樣,它更優雅的方式國際海事組織。

當然也有某些情況下,這將是更好的連接三次(如:從這個查詢獲得的信息將是複雜的),但對於大多數的情況下,我會做的第二種方式。

+1

爲什麼你連接三次來查詢三個表? – 2014-10-16 14:40:39

0

我會創建一個存儲過程,返回所有需要預格式化的字段,不多不少。

然後只需循環php而不用調用任何其他表。

這樣你只運行1個查詢,而你只能得到你需要的字節。所以相同的帶寬,更少的http請求=更多的性能。