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