mysql - 优化Mysql以避免冗余但仍能快速访问可计算数据

标签 mysql redundancy

为了解决这个问题,举一个例子:我有一个包含用户、问题和答案的数据库。每个用户都有一个分数,可以使用问题和答案表中的数据来计算。因此,如果我在用户表中有一个分数字段,那么它将是多余的。但是,如果我不使用分数字段,那么每次计算分数都会显着降低网站速度。

我当前的解决方案是将其放入分数字段中,然后每隔几个小时运行一个 cron 来重新计算每个人的分数,并更新该字段。

有没有更好的方法来处理这个问题?

最佳答案

在我看来,消除冗余对于创建高效(且清晰!​​)的代码来说是次要的。

为什么不使用 cron 来更新分数,而不是 create a trigger当记录插入到适当的位置时更新用户的分数?

如果是在 answers 表更新时更新分数,那么您将执行以下操作:

create trigger 'scores_increment'
    after insert on 'answers'
    for each row begin
        update 'users' set user_score = user_score + 1 where user_id = NEW.user_id;
    end;

create trigger 'scores_decrement'
    after delete on 'answers'
    for each row begin
        update 'users' set user_score = user_score - 1 where user_id = NEW.user_id;
    end;

不过,DBMS 有时会“打嗝”并忘记运行触发器或其他东西。我建议将设置分数的原始 cron 脚本每周运行一次。

关于mysql - 优化Mysql以避免冗余但仍能快速访问可计算数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840357/

相关文章:

MySQL相关查询混淆

php - 无法通过 PHP 的 INSERT 查询将详细信息插入表中

bash跨多个字段查找非冗余数据

encoding - 冗余编码?

node.js - 如何使用 NodeJs 实现 Google App 引擎冗余

Java删除数组中的冗余项

MySQL 连接性能问题与 OR 条件

mysql - 无法在 laravel 5.4 中编辑文档详细信息

java - 显示数组中没有冗余的元素

mysql - 优化 MySQL 查询