簡體   English   中英

性能:SQL查詢與服務器端PHP循環(MYSQL與PHP)

[英]Performance : SQL Queries vs Server-Side PHP Loops (MYSQL vs PHP)

我沒有看到關於這個主題的很多信息並且需要一些數據。 我是新手使用復雜的MySQL查詢,我想知道復雜查詢的性能成本與簡單查詢相比,然后運行服務器端PHP計算。

例如:

'簡單'查詢:

SELECT id as ID, date(x_date),  v_price as price
                From tableX
                WHERE v_price IN 
                (
                    select MIN(v_price) from tableX
                    GROUP BY week(x_date)
                )
            )

現在假設我想計算類似價格發生的次數。

我可以用兩種方式做到這一點。

A)使用foreach循環服務器端php並計算數據

B)在sql中做另一個選擇

group by price
ORDER BY COUNT(price) DESC

哪種方式最好? 通過SQL或服務器代碼(PHP)

什么是性能成本,時間,服務器負載等.....

首先,在數據庫中完成工作幾乎總是更好。 對於每個有人想要進行RBAR(逐行激動行)處理的上下文,會多次討論這個問題。

其次,這個“簡單”查詢不太可能做你想要的:

SELECT id as ID, date(x_date), v_price as price
From tableX
WHERE v_price IN (select MIN(v_price) from tableX FROM tableX GROUP BY week(x_date))

這將返回tableX中所有行,其中最低價格與任何一周的最低價格相匹配。 更有可能的是,你想:

SELECT id as ID, date(x_date), v_price as price
From tableX
WHERE (yearweek(x_date), v_price) IN (
          select yearweek(x_date), MIN(v_price)
          from tableX 
          group by yearweek(x_date)
         );

請注意,這也需要考慮年份。

讓我們考慮下面的例子

select MIN(v_price) from tableX

這將做的是它將通過索引查找tableX並找到最低價格。
現在讓我們嘗試在DB服務器之外進行。 首先,您必須從DB獲取數據

select v_price from tableX

我希望你已經看到了差異。 這意味着從數據庫端的存儲中提取大量數據並進行大量數據傳輸。 即使您的應用程序和數據庫將在同一台機器上,也意味着消耗大量內存並花費大量CPU周期。
如此簡單的答案就是在DB中進行,因為它幾乎總是更快,資源更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM