2009-01-22 73 views
0

我在使用MySQL作爲我的數據庫在php中構建一個wepage。php和MySQL:2個請求或1個請求?

哪種方式更快?

  1. 向folling query的2個請求。

    SELECT points FROM data;
    SELECT sum(points)FROM data;

  2. 1請求MySQL。將結果保存在一個臨時數組中,並在php中計算總和。

    $ data = SELECT points FROM data;

編輯 - 數據大約是200-500行

回答

5

這真的要取決於很多不同的因素。我會建議嘗試兩種方法,並看看哪一種更快。

2

多少數據,我們在談論什麼?我認爲MySQL在大多數情況下可能會更快地完成這些操作。

編輯:您所談論的數據類型,可能不會造成大量的差異。但是數據庫往往會針對這些查詢進行優化,而PHP不是。我認爲第二個數據庫查詢可能是值得的。

3

由於Phill和Kibbee已經非常有效地回答了這個問題,所以我想指出,過早優化是一個Bad Thing(TM)。寫出最簡單的你和個人資料,個人資料,個人資料。

0

對於mySQL效率的一般經驗法則是儘量減少SQL請求的數量。每次調用數據庫都會增加開銷,並且所需時間「很昂貴」。

mySQL完成的優化非常好。它可以通過很多連接,嵌套和計算處理非常複雜的請求,並使其高效運行。

但它只能優化個別請求。它無法檢查兩個不同SQL語句之間的關係並在它們之間進行優化。

在你的例子1中,這兩條語句將向數據庫發出兩個請求,並且表將被掃描兩次。

你的例子2你保存結果並自己計算總和將比1快。這隻會是一個數據庫調用,並且循環遍歷PHP中的數據以獲得總和比第二次調用數據庫。

-1

做它的mySQL方式。讓數據庫管理員完成它的工作。 MySQL是此類任務

1

優化如果你想這樣做在一個行,使用運行總計是這樣的:

SET @總= 0;
SELECT points,@total:= @ total + points AS RunningTotal FROM data;

1

我不會擔心它,直到我遇到性能問題。

1

如果您使用兩個不同的查詢,您需要注意獲取行數&以獲取它們的總和之間的數據更改的可能性。在出現可觀察的性能問題之前,我會堅持自己總結以保持頁面的一致性。

0

只是爲了它的樂趣。

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"]; 
    } 
} 
0

您可以使用聯盟這樣的:

(選擇點,空從數據總)工會(選擇空,從數據之和(點)按點分組);

結果將如下所示:

 
    point    total 
    2     null 
    5     null 
    ... 
    null     7 
您可以弄清楚如何處理它。