什么更好;mysql调度程序或php脚本和crontab?



我有 1 个 mysql 表,其中有数千行。我将其用作用户的交易历史记录。我还在同一页面上查询此表以获取每个产品的收入总和。这是我的两个 MySQL 调用;

$earnperproduct = mysqli_query($con,"SELECT product, SUM(amount) AS totalearn FROM wp_payout_history WHERE user=$userid GROUP BY product");
$result = mysqli_query($con,"SELECT * FROM wp_payout_history WHERE user=$userid ORDER BY date DESC");

我担心的是,随着表格的增长,$earnperproduct调用会变得过于密集并减慢页面加载速度。因此,我认为与其在每次加载页面时都执行 sum 命令,不如在更改wp_payout_history时更新摘要(示例wp_summary_table(以将过去的值替换为每个用户和产品的新SUM(AMOUNT)值;从而查询类似的东西;

$earnperproduct = mysqli_query($con,"SELECT * FROM wp_payout_summary_table WHERE user=$userid ORDER BY product DESC");

TL;DR使用$earnedperproduct样式调用更新表的最佳方法是什么?使用 mysql 事件调度程序或带有 crontab 的 PHP 脚本会更好吗?是否有任何教程可以帮助我根据需要创建任一选项?

您提到的两种控制机制都使用时间作为操作的触发器。但是您的描述表明您确实希望在数据更改时触发操作。在关系数据库中,在数据更改时触发操作的最佳方法是使用 ....触发。这使您的问题与此重复。

可以说,快照交易可能更有效,然后是这样的......

[INSERT INTO summary_table (user, total_amount, last_id) ]
SELECT 
user, SUM(amount), MAX(id)
FROM (
SELECT a.user, a.total_amount AS amount, a.last_id
FROM summary_table a
WHERE a.user=$user_id
AND last_id=(SELECT MAX(b.last_id)
FROM summary_table b
WHERE b.user=$user_id) 
UNION
SELECT h.user, h.amount, h.id
FROM wp_payout_history h
WHERE h.user=$user_id
AND h.id>(SELECT MAX(c.last_id)
FROM summary_table c
WHERE c.user=$user_id)
) ilv
GROUP BY user;

。然后,使用什么来刷新历史记录并不重要 - 查询将始终为您提供最新的响应。如果您沿着这条路走下去,那么在汇总表中添加一个虚拟整数列,并将0 as unaggregatedrows添加到第二个 SELECT,SUM(1)添加到第 4 个 SELECT,以确定何时更新汇总表最有效。

最新更新