php - 在 MySQL 端或 PHP 端处理此查询更好吗?

标签 php mysql performance

说明:

为闭源 PHP 程序编写扩展, 我需要根据这些示例查询添加一些数字

SELECT sum(value) AS sum1 FROM table WHERE user_id=X AND text='TEXT_HERE_A'
SELECT sum(value) AS sum2 FROM table WHERE user_id=X AND text='TEXT_HERE_B'

在 PHP 中添加这些数字,然后更新数据库中的字段

$update = $sum1 + $sum2 - $php_sum;
UPDATE table SET value=$update WHERE user_id=X

问题:

如您所见,我在 MySql 中基于“文本”数据类型进行搜索,

你觉得这个 Action 可以吗?或者我应该改为执行以下操作:

SELECT value,text FROM table WHERE user_id=X

然后通过循环在PHP端进行求和和计算(这里的区别是我只根据user_id KEY(INT)选择,求和是在PHP端计算的)

哪个在大表中性能更好?

Question: Which one is better in this situation? Calculating SUMs in PHP side or MySQL side?

最佳答案

返回大量行并在客户端进行过滤和求和通常是错误的——您通常希望最小化客户端和服务器之间传输的数据量。因此,如果您可以使用 WHERE 子句进行过滤并使用 SUMCOUNT 之类的内容进行聚合,通常会更好。

我会尝试在服务器上完成所有事情。

UPDATE table AS t1
JOIN (SELECT SUM(value) AS total_value
      FROM table
      WHERE user_id = X AND text in ('TEXT_HERE_A', 'TEXT_HERE_B')) AS t2
SET value = total_value - $php_sum 
WHERE user_id = X

关于php - 在 MySQL 端或 PHP 端处理此查询更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37871553/

相关文章:

c++ - 在 C++ 中使用指针会减少运行时间?

android - Android 虚拟设备的性能

python - numpy ufuncs 速度与 for 循环速度

php - 我如何使用 PHP 从 mysql 数据库中检索和显示时间戳?

javascript - 使用 ROWCOUNT 仅插入唯一记录时出现 MySQL 服务器错误

php - Symfony2 中的 SAAS 和 Multi-Tenancy ?

MySql 允许使用条件字段但不允许读取

MYSQL:无法添加或更新子行:外键约束失败

php - 仅使用 index.php 和数据库的网站

php - 基于另一列 Laravel 的求和列