自动更新和缓存视图

  • 本文关键字:缓存 视图 更新 mysql
  • 更新时间 :
  • 英文 :


假设我想找到同时出现在模式=1和模式=2中的id:

SELECT id FROM tab a WHERE mode=1 and (SELECT COUNT(*) from tab b where b.mode=2 and a.id=b.id) = 0

我需要这个查询运行得非常快,即使该表包含数百万行(已经在 id1 和 id2 上有一个索引(。有没有办法创建类似包含此查询的视图,每次表更改时都会自动更新,以便提前为我准备结果?

您可以创建一个名为 summary_tab 的表。 使用编程语言或命令行执行如下所示的查询:

insert into summary_tab 
select id from ...

然后,使用任务计划程序(如 cron(每隔几分钟执行一次脚本或命令行。

另一种选择是在表上创建一个 AFTER INSERT 触发器,该触发器将执行此类查询并更新摘要表。但是,如果查询需要很长时间和/或如果您在表中插入一堆记录tab触发器将减慢插入速度。

你也可以尝试这样的事情:

select id
from tab
where mode in (1, 2)
group by id
having count(*) = 2

检查此查询的速度和结果。如果不是那么快,请尝试在 id 上创建一个索引,在模式上创建一个索引,然后使用 id+mode 的组合创建另一个索引,看看其中一个索引是否使查询足够快,以至于您不必使用汇总表。

最新更新