mysql触发器跟踪列的更新频率

c0vxltue  于 2023-02-07  发布在  Mysql
关注(0)|答案(1)|浏览(110)

我在表中有一个列“processed_at”。它可以从代码中的多个位置重置,以便向作业指示该行需要处理。我想了解processed_at是如何设置为空的。
最简单的方法是什么?理想情况下,我会通过行id知道这种情况发生的频率,但也可以只知道某个时间段内所有行的组合数。
可以这样做吗:一个触发器对更新做出React,然后将id和reset时间戳存储到一个单独的表中?这会对原始查询的性能产生显著影响吗?

9gm1akwq

9gm1akwq1#

大概是这样的

create table mytable_resets (
  id serial primary key,
  mytable_id bigint unsigned not null,
  reset_at datetime not null
);

delimiter ;;

create trigger t after update on mytable
for each row begin
  if NEW.processed_at is null then
    insert into mytable_resets values (default, NEW.id, NOW());
  end if;
end;;

delimiter ;

是的,它将影响原始查询的性能。
数据库写入的成本大致与它更新的索引数成比例。如果查询执行触发器以插入到另一个表中,则它会添加另一个索引更新。在本例中,是mytable_resets表的主键索引。
但是,与mytable表多一个索引相比,开销不会大很多。

相关问题