自动更新和缓存的视图

时间:2019-04-28 00:41:51

标签: mysql

假设我想查找同时出现在mode = 1和mode = 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上都有索引),我仍需要此查询快速运行。有没有办法创建包含该查询的视图之类的东西,每次表更改时都会自动更新,以便为我提前准备结果?

1 个答案:

答案 0 :(得分:2)

您可以创建一个名为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上创建一个索引,在mode上创建另一个索引,并在id + mode组合下创建另一个索引,然后查看其中一个索引是否使查询足够快,而不必使用汇总表