我有一个使用多个连接的复杂查询(实际上是8个)。我想把它简化成一个视图。经过一番研究后,我可以看到简单性和安全性的好处。但我没有看到任何速度提及。
视图是否像预编译一样工作,查询是预编译的?使用视图会有显着的性能提升吗?
答案 0 :(得分:16)
不,视图只是存储的文本查询。您可以对其应用WHERE
和ORDER
,执行计划将根据这些条款进行计算。
答案 1 :(得分:1)
视图基本上是存储的子查询。基本上没有区别:
SELECT *
FROM someview
和
SELECT *
FROM (
SELECT somestuff
FROM underlying table
);
除了视图更具可移植性之外,因为每次要处理它返回的任何数据时都不必写出基础查询。
答案 2 :(得分:0)
它有时会有所帮助,但它不是银弹。我已经看过一个视图帮助表现,但我也看到它伤害了它。视图可以强制实现,如果MySQL没有为您选择一个好的访问路径,有时可以为您提供更好的访问路径。