2011-03-03 12 views
1

我知道多個變量是表達式的數目,列數,返回行數,使用索引等等的一部分。但是如果我們整體講話大連接或多重抓取最有效?

運行多個查詢5+)連接,其中大部分表將包含具有與主表中的行相對應的信息的行,並且返回的結果將在20.000行的範圍內。爲了說明起見,我們假設第一個表格將包含具有創建日期的用戶,並且此日期我們決定選擇用戶。其他表格包含諸如會話信息,用戶註釋等等。所有用戶都應該被挑選出來,但是根據輔助表中字段的值,我們可能會忽略一個用戶的會話數據,並在另一個用戶的會話數據上做一些工作用戶何時通過結果。這樣我們就可以在一個查詢中獲得所有需要的數據,但可能同時爲某些用戶獲取一些冗餘數據。

或者按照日期挑選用戶,迭代結果時我們從每個用戶的其他表中獲取數據時效率會更高嗎?

假設返回行的工作是在PHP5 +中完成的。

+2

「如果我們整體講話」,我們無法真正回答這個問題。你似乎在尋求* *特定的*回答*廣義*問題。這是不可能的。 – 2011-03-03 12:36:07

+2

@Andrew:哦,那*是*可能的。什麼是不可能的是一個*正確*具體答案的一般問題! – 2011-03-03 12:39:51

回答

1

我會說,做一個基準。

這取決於「什麼時候有必要」的頻率。如果你需要爲10%的用戶提供額外的日期,我認爲第二種方法會更好。如果您需要90%,最好是在一個大查詢中檢索所有內容。

0

如果你的表有適當的索引(這對於聯接有很大幫助),一個單一的SQL查詢,甚至有點複雜,可能會比幾個查詢更快,這將意味着每個查詢PHP和MySQL服務器之間的交換。


(不過,當然,肯定知道什麼適用於您的具體情況最好的唯一方法是測試兩種解決方案,標杆他們!)

1

大加盟。

我可以絕對沒有證據支持這一點。不過,我的確從一些經驗中發表了看法:在我所使用的系統中,我們做了數百萬個小小的簡單查詢,而不是幾個大問題,所有數據密集型工作都需要很長時間。例如,加載直接SQL負載可以在幾分鐘內完成的數據需要一個小時。每查詢成本完全支配該方程。