2012-07-30 37 views
4

下面是我要從當前項目的產品頁面的MySQL數據庫中提取的數據的描述。產品數據來自product表,變量名稱(顏色,大小等)來自名爲product_option_group的表格,這些變量的實際值(紅色,綠色,藍色或小型,中型,大型等)。 )在product_option表中,並且與該產品相關的產品照片在product_photo中。我應該走多遠才能最小化數據庫查詢?

我很可能使用JOIN -s來創建一個查詢,我會再需要foreach地獄出來,使有用的,它返回了這一切(產品,變量值,照片)單個查詢。我的問題是這是否有意義。我應該在多大程度上儘量減少查詢?

對於產品列表,我使用單個查詢來獲取少量產品數據和第一張產品照片的網址。但在顯示單個產品的頁面上,我對最佳方法有點不確定。看起來像我寫一個瘋狂的長MySQL查詢的一種方式,然後做了很多PHP解析。另一種方式是我正在進行一些數據庫調用。

哪個最好?

+0

當你考慮到每個mysql調用需要x的時間來聯繫mysql服務器,處理數據並返回它,然後外推a)循環和b)站點流量......是的,保持mysql查詢最低限度。某些框架可以幫助你完成這個任務(例如fuelphp)。 – Matt 2012-07-30 14:50:12

+0

請顯示代碼。 – 2012-07-30 14:53:59

+0

'foreach' = 100納秒**納秒**秒到幾微秒。 DB查詢的延遲時間= 20到200毫秒**(通常 - 如果你在龐大的數據集上做複雜的事情,可能是秒,分鐘,小時)。訪問數據庫通常至少需要3-4次網絡往返時間(如果沒有連接,再加上3次)加上至少1-2次搜索時間(除非數據集足夠小以適應內存,通常不會),再加上等待鎖,以及實際傳輸和處理查詢和數據所需的任何內容。你不能擺脫後者,但你可以剝奪前者。 – Damon 2012-07-30 15:11:01

回答

5

我總是被教導(並與之合作)的假設,你應該只在需要時進行優化,而不是嘗試優化不會造成問題的事情。

所以,就你的情況來說,把你得到的東西通過磨機運行 - 在它上面加載負載,看看它是如何處理它的。如果速度很慢,那麼考慮是否要嘗試合併爲一個查詢,或者添加一個或兩個索引,或者您可能會採取哪些措施來加快速度。問問你自己是否數據庫緩慢返回,或者兩者之間的流量是否存在問題,或者PHP的處理速度不夠快。

花時間在需要的地方,並記住保持簡單。

+0

謝謝Ametren。你重新肯定了我的感受。如果事情一旦我裝載了測試數據並以一些流量點擊它,我就會看得更近。同時,我要和KISS一起去。 – 2012-07-30 16:14:01

+0

@StevenSokulski當談到db的「KISS」大致轉換爲「Normalize直到它受到傷害,非規範化直到它工作。」 – Sharky 2014-12-03 11:20:09

3

最好減少每頁加載的查詢次數。

但是,數據庫服務器擅長處理許多小型查詢。很多CMS的數百查詢每頁加載

所以,總是嘗試優化,但不要發瘋。

+0

謝謝丹。看起來你像ametren一樣迴應同樣的感受。目前,這款購物車適用於一個小型網站,每天處理1或2個訂單,所以我不會失去任何超出規模的睡眠。謝謝! – 2012-07-30 16:13:16