前端:Reactjs 后台:NodeJS+Express 数据库:MySQL工作台 托管:Linode

现在,我有一个计划每2秒运行一次的事件,以更新状态列.不过,我担心这一事件可能会影响服务器的性能.因此,我想听听你们对我应该做什么的建议.

我想根据数据库中的开始日期和结束日期数据更新Status列.我用于MySQL事件的SQL代码是:

CREATE EVENT update_status
ON SCHEDULE EVERY 2 SECOND
DO
UPDATE `practiceme`.`events` as e
set `e`.`status` = 
CASE
WHEN CURRENT_DATE > `e`.`eventEnd` THEN 'Past'
WHEN CURRENT_DATE < `e`.`eventStart` THEN 'Upcoming'
WHEN CURRENT_DATE > `e`.`eventStart` AND CURRENT_DATE < `e`.`eventEnd` THEN 'Ongoing'
ELSE `status`
END

我的数据库表"Events"存储开始日期和结束日期.

Database table

推荐答案

过滤你的记录总是一个好主意.可能的变化是什么,以及何时:

  • 从正在进行到过go (如果之前正在进行并已结束)
  • 从即将到来到正在进行(如果它之前即将到来并已开始)

就这样.

CREATE EVENT update_status
ON SCHEDULE EVERY 2 SECOND
DO
UPDATE `practiceme`.`events` as e
set `e`.`status` = 
CASE
WHEN CURRENT_DATE > `e`.`eventEnd` THEN 'Past'
WHEN CURRENT_DATE < `e`.`eventStart` THEN 'Upcoming'
WHEN CURRENT_DATE > `e`.`eventStart` AND CURRENT_DATE < `e`.`eventEnd` THEN 'Ongoing'
ELSE `status`
END
WHERE 
((`e`.`status` <> 'Past') AND (`e`.`eventEnd` < CURRENT_DATE)) OR
((`e`.`status` <> 'Ongoing') AND (`e`.`eventStart` > CURRENT_DATE))

status转换为enum也是一个好主意,并确保status默认为即将到来.

Mysql相关问答推荐

MYSQL子查询

加载数据本地infile,字段中有双引号和逗号

将值代入子查询

用于将重复行的唯一列值作为单独列获取的SQL查询

在MySQL CLI中,是否有自动完成过程的方法?

Mysql根据文本语言或行数将列拆分为多列

如何编写按天数汇总值的sql查询?

MySQL,递归 CTE.它如何以这种句法形式工作?

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

Mysql Pivot 查询/建议

为什么这个 NOT NULL 到 NULL 迁移会触发大量 I/O 操作?

从 SQL 中的左连接和内连接中减go 计数

WHERE SQL 语句中的列顺序是否重要

使用case查询并更新最后一条记录

MariaDB 下的慢速更新、删除和插入查询

SQL UPDATE中的str_replace?

如何在特定数据库中创建表?

第 1 行的 CSV 输入中的列数无效错误

SQL WHERE 列 = 一切

cron 启动的 mysqldump 和密码安全