关于在MySQL中使用视图视图的效率

时间:2012-12-04 10:03:52

标签: mysql views

我最近已经了解了视图的概念,我发现它们对于将复杂查询拆分成部分非常有帮助。

我的问题是,当我开始从视图中查询时,有任何效率上的缺点,而这些视图又是来自其他视图的查询等...

所以我会举例:

view1 -> query from tables A, B & C
view2 -> query from tables D, E & F
view3 -> query joining view1 & view2

在查询view3而不是设计连接表A,B,C,D,E&表的单个查询时,是否存在任何速度劣势? F'

如果我选择使用视图方法,它是否重要,我在view1,view2&的设计中有ORDER BY子句。 view3还是更好的是我没有在任何视图中放置任何ORDER BY子句,我只是在查询view3时使用ORDER BY?

非常感谢你的帮助! 博加。

1 个答案:

答案 0 :(得分:2)

对于order by,请参阅CREATE VIEW Syntax

  

视图定义中允许使用ORDER BY,但如果使用具有自己的ORDER BY的语句从视图中进行选择,则会忽略它。

View Processing Algorithms上,您可以看到MySQL进程如何选择视图。一如既往,这取决于。 ; - )

似乎MERGE算法效率最高,因为算法temptable首先将视图结果复制到临时表并对其进行查询。但是你不能总是使用merge,参见最后一节

  

如果不能使用MERGE算法,则必须使用临时表。如果视图包含以下任何构造,则不能使用MERGE:

     
      
  • 聚合函数(SUM(),MIN(),MAX(),COUNT()等)
  •   
  • DISTINCT
  •   
  • GROUP BY
  •   
  • HAVING
  •   
  • LIMIT
  •   
  • UNION或UNION ALL
  •   
  • 选择列表中的子查询
  •   
  • 仅指文字值(在这种情况下,没有基础表)
  •