有没有办法缓存View以便快速查询?

时间:2013-05-22 09:05:39

标签: mysql view

我对Views非常陌生,所以如果这是一个愚蠢的问题,请原谅我,但我有一个View非常有助于优化一个非常笨拙的查询,并允许我选择一个小的列子列但是,我希望View能够将View实际存储在某个地方,这样选择它就不会花费很长时间。

我可能会弄错,但是我(从create view执行的速度和我查询的查询持续时间)得到的意义是,View实际上是在外部查询之前作为查询运行的,每次我选择反对它。

我真的希望我忽略了一些机制,当我运行CREATE VIEW时,它可以完成查询View查询*的艰苦工作,这样我对这个静态View的后续选择就会非常迅速。 / p> 顺便说一下,我完全理解,显然这个VIEW将是创建VIEW时存在的数据的快照,并且不会反映在创建VIEW之后插入/更新的任何新信息。这实际上是我需要的。

TIA

4 个答案:

答案 0 :(得分:17)

您要做的是实现您的观点。看看http://www.fromdual.com/mysql-materialized-views

答案 1 :(得分:2)

你所谈论的是物化视图,至少是DB2的一个特性,但据我所知,不是MySQL。

有些方法可以通过定期或按需创建/填充表来模拟它们,但真正的物化视图知道基础数据何时发生了变化,并且只在需要时重新计算。

如果创建视图后数据永远不会改变(如您在评论中所示),只需创建一个全新的表来保存数据子集并查询即可。人们总是抱怨速度慢但很少关于数据存储要求: - )

答案 2 :(得分:0)

由于视图基本上是SELECT语句,因此您可以使用query cache来提高效果。

但首先你要检查:

  • 您可以在相关表格中添加索引以加快查询速度(使用EXPLAIN
  • 数据不经常变化,您可以实现视图(制作快照)

答案 3 :(得分:0)

使用实体化视图。它可以存储计数总和等数据,但是可以,在更新表之后,您需要刷新视图以获取正确的结果,因为它们不会自动更新。此外,从视图中查询后,结果将被存储在高速缓存中,因此内存周期减少到2,如果从表本身查询,则为4。因此,它从第二次开始就变得高效。。当您从视图中查询第一次时,数据将从主内存中提取,并在之后存储在缓存中。