性能:SQL查询与服务器端PHP循环(MYSQL与PHP)

时间:2017-07-04 12:23:17

标签: php mysql sql loops

我没有看到很多关于这个主题的信息,需要一些数据。我是新手使用复杂的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)

性能成本,时间,服务器负载等是什么......

2 个答案:

答案 0 :(得分:2)

首先,在数据库中完成工作几乎总是更好。对于每个人都想要进行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)
         );

请注意,这也需要考虑年份。

答案 1 :(得分:0)

让我们考虑以下示例

select MIN(v_price) from tableX

这样做会是通过索引查找tableX并找到最低价格 现在让我们尝试在DB服务器之外进行。首先,您必须从DB

获取数据
select v_price from tableX

我希望你已经看到了差异。这意味着从数据库端的存储中提取大量数据并进行大量数据传输。即使您的应用程序和数据库将在同一台机器上,也意味着消耗大量内存并花费大量CPU周期 如此简单的答案就是在DB中进行,因为它几乎总是更快,资源更少。