2011-02-03 19 views
19

我正在创建一个表格,它将突出显示符合特定条件的数据。例如,如果我有一个具有整数值的表,我希望我的视图显示具有大于100的值的行。我知道如何通过在表上创建视图来实现此目的,但视图是动态的吗?我已经在MySQL中测试过了,它似乎是真的。但是如果我的桌子有超过1000行,这是否有效?该视图是否仍会“动态”更新原始表中的任何更改?MySql Views是否动态且高效?

+0

请参阅http://stackoverflow.com/q/7922675/632951 – Pacerier 2014-10-26 02:33:27

回答

23

基本上,MySQL中基本上有2 types of views

  1. 合并视图

    这种类型的观点基本上只是与视图的SQL重新写你的查询。所以这对于自己编写查询是一个短暂的手段。这不会提供真正的性能优势,但可以使复杂查询变得更轻松,并使维护变得更加轻松(因为如果视图定义更改,则不需要针对视图更改100个查询,而只需定义一个)。

  2. 不是Temptable查看

    这种类型的视图创建临时表与视图的SQL查询。它具有合并视图的所有优点,但也减少了视图表上的锁定时间。因此,在高负载的服务器上,它可能会有相当显着的性能增益。

还有“未定义”视图类型(默认值),这让我们的MySQL挑它认为在查询时的最佳类型...

但需要注意的一些需要注意的重要的是, MySQL不支持materialized views。所以它不像甲骨文那样复杂的观点会显着增加查询的性能。视图的查询总是在MySQL中执行。

就效率而言,MySQL中的视图不会增加或降低效率。在编写和维护查询时,它们可以让您的生活更轻松。我已经在有数亿行的表上使用了视图,并且它们工作得很好......

+0

好的,这是有道理的。感谢ircmaxell! – Santiago 2011-02-03 14:39:11

9

mysql不会在临时表上使用索引...所以它会严重影响您的性能。