MySQL视图与嵌入式查询,哪个更快?

MySQL视图与嵌入式查询,哪个更快?,sql,mysql,view,materialized-views,Sql,Mysql,View,Materialized Views,我将使用视图优化MySQL嵌入式查询,但我不确定它是否会产生效果: SELECT id FROM (SELECT * FROM t); 我想将其转换为: CREATE VIEW v AS SELECT * FROM t; SELECT id FROM v; 我听说过SQL Server中的“索引视图”,但我不确定MySQL。任何帮助都将不胜感激。谢谢 视图可能更快(可能更快),但为什么不测试一下呢?或者对这两个查询运行解释,看看它们将如何执行?大致相同。它会快还是不快取决于你的索引 MyS

我将使用视图优化MySQL嵌入式查询,但我不确定它是否会产生效果:

SELECT id FROM (SELECT * FROM t);
我想将其转换为:

CREATE VIEW v AS SELECT * FROM t; 
SELECT id FROM v;

我听说过SQL Server中的“索引视图”,但我不确定MySQL。任何帮助都将不胜感激。谢谢

视图可能更快(可能更快),但为什么不测试一下呢?或者对这两个查询运行解释,看看它们将如何执行?

大致相同。它会快还是不快取决于你的索引


MySQL缓存查询结果,因此只要您的查询在执行之间相同,并且只要基础数据集相同(未添加新记录),它将在下次执行查询时返回缓存结果。

每次获取视图时都将运行select语句


视图的行为有点不同,请参见SQL Server中的索引视图通常称为“物化视图”,MySQL不支持。与其他供应商相比,MySQL的视图支持相当有限


普通视图只是一个准备好的SQL语句——使用您提供的两个示例之间没有区别。在某些情况下,优化器可以将从视图中进行选择时的WHERE子句推送到视图查询中,但它完全不受您的控制。

您所引用文档的哪一部分?我找不到与select执行差异相关的内容。“视图定义在创建时是“冻结”的,因此以后对基础表的更改不会影响视图定义。例如,如果在表上将视图定义为select*,则以后添加到表中的新列不会成为视图的一部分。”