我没有看到很多关于这个主题的信息,需要一些数据。我是新手使用复杂的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)
性能成本,时间,服务器负载等是什么......
答案 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中进行,因为它几乎总是更快,资源更少。