我将使用视图优化MySQL嵌入式查询,但我不确定它是否会产生效果:
SELECT id FROM (SELECT * FROM t);
我想将其转换为:
CREATE VIEW v AS SELECT * FROM t;
SELECT id FROM v;
我听说过SQL Server中的“索引视图”,但我不确定MySQL。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:2)
SQL Server中的索引视图通常称为“物化视图”,MySQL不支持。与其他供应商相比,MySQL的VIEW支持相当有限 - restrictions are listed in their documentation。
普通视图只是一个准备好的SQL语句 - 使用您提供的两个示例之间没有区别。在某些情况下,优化器可以将从View中选择的WHERE子句推送到VIEW查询中,但它完全不受您的控制。
答案 1 :(得分:0)
视图可能更快(可能是),但为什么不测试呢?或者针对两个查询运行EXPLAIN以查看它们将如何执行?
答案 2 :(得分:0)
大致相同。是快还是不快取决于你的索引。
MySQL缓存查询结果,因此只要您的查询在执行之间相同,并且只要基础数据集相同(没有添加新记录),它就会在下次查询执行时返回缓存结果。
答案 3 :(得分:0)
每次获取视图时都会运行select语句。
视图的行为略有不同,请参阅Create View