【发布时间】:2011-12-29 20:12:23
【问题描述】:
我在嵌入式系统上有一个小型数据库,其中包含一些我想限制为 1000 行的表。为此,我设置了一个触发器,该触发器在每次插入新行后执行。触发器的代码是:
CREATE TRIGGER after_insertion_trigger
AFTER INSERT ON table
BEGIN
DELETE FROM table
WHERE uuid IN (
SELECT uuid FROM table ORDER BY sent ASC, timestamp DESC LIMIT -1 OFFSET 1000
);
END;
问题是,在使用触发器时插入一个完整的表每次需要超过 3 分钟而不是 0.4 秒,这是完成插入和删除语句的正常事务所需的时间。
使用触发器完成插入所需的时间似乎也随着数据库行的增加而增加。
我在 Stack Overflow 和其他有关触发器的网站上发现了许多不同的线程,但没有一个能帮助我解决问题。我正在使用 SQLite 3.7.9。
有人知道为什么我的表现这么差吗?我不需要很大的性能,因为插入不会经常发生,但是插入 3 分钟是不可接受的。
【问题讨论】:
-
我认为这可能对您有所帮助:stackoverflow.com/questions/2035670/…