2011-01-25 451 views
23

我有一个复杂的查询使用很多连接(实际上是8)。我正在考虑将它简化成一个视图。经过一些研究,我可以看到简单性和安全性的好处。但我没有看到任何速度的提及。MySQL视图比普通查询更快吗?

视图是否像预编译语句一样工作,其中查询是预编译的?使用视图有什么显着的性能收益?

+2

有些数据库会预编译视图,但我不相信MySQL会。你可能想看看这个问题:http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views – 2011-01-25 02:17:30

+0

与答案相反 - 根据我的经验,对于有很多连接的视图,直接做查询运行得更快。 – 2015-11-20 17:23:28

回答

13

不,视图只是一个存储的文本查询。您可以对其应用WHEREORDER,执行计划将根据这些条款进行计算。

+4

这不完全正确。如果您为视图算法选择合并,这基本上是正确的,但是如果您选择了可修改,它将会实现。未定义(默认情况下,如果未指定)让MySQL选择,这可以做你可能不期望的事情。 – Ray 2011-01-25 02:18:31

+0

我不是MySQL的专家,但我很确定TempTable算法控制MySQL在处理请求结果时如何处理视图,并且完全不影响视图的存储方式。 – 2011-01-25 02:38:37

0

它有时可以帮助,但它不是银弹。我已经看到了观看帮助表演,但我也看到它伤害了它。一个视图可以强制实现,如果MySQL没有为你选择一个好的视图,有时可以让你获得更好的访问路径。

0

一个视图的基本上存储的子查询。有本质上没有区别:除视图

SELECT * 
FROM someview 

SELECT * 
FROM (
    SELECT somestuff 
    FROM underlying table 
); 

更轻便一点,因为你没有给你想要的任何数据去上班时间写出来的基础查询它返回。