MySQL 中的触发器与事件性能

问题描述 投票:0回答:1

我有一个用作“缓存”表的表,其中的数据会在几秒钟内收集并移动到另一个表。

我想知道是否最好创建一个触发器来移动插入的行af ter insert,或者创建一个每 1 秒轮询一次的事件,并移动通过执行检查的过程找到的数据。

此表中每分钟仅插入约 5-20 行,并且我有一个相当简单的 IF 语句,用于检查某个值是否以某种模式开头。 根据模式是否存在,它会被分配一个状态 (tinyint) 到它所在的表。

我一直听说触发器的性能成本很高,但在这种情况下,以如此低的音量每秒轮询似乎有点多余,在晚上甚至可能有一小时没有一次插入。

CREATE TRIGGER xxx
AFTER INSERT ON mytable
FOR EACH ROW
BEGIN
    IF statement
    END IF

or
CREATE EVENT xxx
ON SCHEDULE EVERY 1 SECOND
DO
    CALL procedure_with_if_check;
mysql events stored-procedures triggers
1个回答
0
投票

触发器的成本并不太高。你所听到的是一个神话。

事实是,any INSERT 会产生一点成本。如果您的触发器执行了一些 INSERT,那么它比您没有执行 INSERT 的效果要多。

INSERT 的成本与其需要写入的索引数量(包括聚集索引)成正比。因此,如果您插入到具有四个索引的表,则比插入到具有两个索引的表的成本更高。

最后,我想说,考虑到您所描述的流量(每分钟 5-20 行),影响是微不足道的,除非您的服务器严重不足。

© www.soinside.com 2019 - 2024. All rights reserved.