2

我最近被介绍了视图的概念,我发现它们对于将复杂的查询拆分成部分很有帮助。

我的问题是当我开始从视图进行查询时是否存在任何效率劣势,而这些视图又是来自其他视图的查询等...

所以我会例如:

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 和 view3 的设计中有 ORDER BY 子句还是最好不要在任何视图中放置任何 ORDER BY 子句我在查询 view3 时只使用 ORDER BY?

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

4

1 回答 1

3

参见order byCREATE VIEW 语法

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

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

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

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

  • 聚合函数(SUM()、MIN()、MAX()、COUNT() 等)
  • 清楚的
  • 通过...分组
  • 拥有
  • 限制
  • UNION 或 UNION ALL
  • 选择列表中的子查询
  • 仅指文字值(在这种情况下,没有基础表)
于 2012-12-04T10:09:41.420 回答