我在使用MySQL作爲我的數據庫在php中構建一個wepage。php和MySQL:2個請求或1個請求?
哪種方式更快?
向folling query的2個請求。
SELECT points FROM data;
SELECT sum(points)FROM data;1請求MySQL。將結果保存在一個臨時數組中,並在php中計算總和。
$ data = SELECT points FROM data;
編輯 - 數據大約是200-500行
我在使用MySQL作爲我的數據庫在php中構建一個wepage。php和MySQL:2個請求或1個請求?
哪種方式更快?
向folling query的2個請求。
SELECT points FROM data;
SELECT sum(points)FROM data;
1請求MySQL。將結果保存在一個臨時數組中,並在php中計算總和。
$ data = SELECT points FROM data;
編輯 - 數據大約是200-500行
這真的要取決於很多不同的因素。我會建議嘗試兩種方法,並看看哪一種更快。
多少數據,我們在談論什麼?我認爲MySQL在大多數情況下可能會更快地完成這些操作。
編輯:您所談論的數據類型,可能不會造成大量的差異。但是數據庫往往會針對這些查詢進行優化,而PHP不是。我認爲第二個數據庫查詢可能是值得的。
由於Phill和Kibbee已經非常有效地回答了這個問題,所以我想指出,過早優化是一個Bad Thing(TM)。寫出最簡單的你和個人資料,個人資料,個人資料。
對於mySQL效率的一般經驗法則是儘量減少SQL請求的數量。每次調用數據庫都會增加開銷,並且所需時間「很昂貴」。
mySQL完成的優化非常好。它可以通過很多連接,嵌套和計算處理非常複雜的請求,並使其高效運行。
但它只能優化個別請求。它無法檢查兩個不同SQL語句之間的關係並在它們之間進行優化。
在你的例子1中,這兩條語句將向數據庫發出兩個請求,並且表將被掃描兩次。
你的例子2你保存結果並自己計算總和將比1快。這隻會是一個數據庫調用,並且循環遍歷PHP中的數據以獲得總和比第二次調用數據庫。
做它的mySQL方式。讓數據庫管理員完成它的工作。 MySQL是此類任務
優化如果你想這樣做在一個行,使用運行總計是這樣的:
SET @總= 0;
SELECT points,@total:= @ total + points AS RunningTotal FROM data;
我不會擔心它,直到我遇到性能問題。
如果您使用兩個不同的查詢,您需要注意獲取行數&以獲取它們的總和之間的數據更改的可能性。在出現可觀察的性能問題之前,我會堅持自己總結以保持頁面的一致性。
只是爲了它的樂趣。
SELECT COUNT(points) FROM `data`
UNION
SELECT points FROM `data`
第一行將是總數,下一行將是數據。
注:聯盟可能會很慢,但它是一個選項。
也可以做更多的樂趣,這支持你排序行。
SELECT 'total' AS name, COUNT(points) FROM `data`
UNION
SELECT 'points' AS name, points FROM `data`
然後通過PHP選擇
while($row = mysql_fetch_assoc($query))
{
if($row["data"] == "points")
{
echo $row["points"];
}
if($row["data"] == "total")
{
echo "Total is: ".$row["points"];
}
}
您可以使用聯盟這樣的:
(選擇點,空從數據總)工會(選擇空,從數據之和(點)按點分組);
結果將如下所示:
point total 2 null 5 null ... null 7您可以弄清楚如何處理它。