说明:
为闭源 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
子句进行过滤并使用 SUM
和 COUNT
之类的内容进行聚合,通常会更好。
我会尝试在服务器上完成所有事情。
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/