我对Views非常陌生,所以如果这是一个愚蠢的问题,请原谅我,但我有一个View非常有助于优化一个非常笨拙的查询,并允许我选择一个小的列子列但是,我希望View能够将View实际存储在某个地方,这样选择它就不会花费很长时间。
我可能会弄错,但是我(从create view
执行的速度和我查询的查询持续时间)得到的意义是,View实际上是在外部查询之前作为查询运行的,每次我选择反对它。
我真的希望我忽略了一些机制,当我运行CREATE VIEW时,它可以完成查询View查询*的艰苦工作,这样我对这个静态View的后续选择就会非常迅速。 / p> 顺便说一下,我完全理解,显然这个VIEW将是创建VIEW时存在的数据的快照,并且不会反映在创建VIEW之后插入/更新的任何新信息。这实际上是我需要的。
TIA
答案 0 :(得分:17)
您要做的是实现您的观点。看看http://www.fromdual.com/mysql-materialized-views。
答案 1 :(得分:2)
你所谈论的是物化视图,至少是DB2的一个特性,但据我所知,不是MySQL。
有些方法可以通过定期或按需创建/填充表来模拟它们,但真正的物化视图知道基础数据何时发生了变化,并且只在需要时重新计算。
如果创建视图后数据永远不会改变(如您在评论中所示),只需创建一个全新的表来保存数据子集并查询即可。人们总是抱怨速度慢但很少关于数据存储要求: - )
答案 2 :(得分:0)
由于视图基本上是SELECT
语句,因此您可以使用query cache来提高效果。
但首先你要检查:
EXPLAIN
)答案 3 :(得分:0)
使用实体化视图。它可以存储计数总和等数据,但是可以,在更新表之后,您需要刷新视图以获取正确的结果,因为它们不会自动更新。此外,从视图中查询后,结果将被存储在高速缓存中,因此内存周期减少到2,如果从表本身查询,则为4。因此,它从第二次开始就变得高效。。当您从视图中查询第一次时,数据将从主内存中提取,并在之后存储在缓存中。