【问题标题】:MySQL VIEW vs. embedded query, which one is faster?MySQL VIEW 与嵌入式查询,哪个更快?
【发布时间】:2011-03-03 21:04:43
【问题描述】:

我打算优化一个带有视图的 MySQL 嵌入式查询,但我不确定它是否会产生效果:

SELECT id FROM (SELECT * FROM t);

我想把它转换成:

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

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

【问题讨论】:

    标签: sql mysql view materialized-views


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      差不多。快不快取决于你的索引。

      MySQL 缓存查询结果,因此只要您的查询在执行之间是相同的,并且只要底层数据集相同(没有添加新记录),它就会在下一次查询执行时返回缓存结果。

      【讨论】:

        【解决方案3】:

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

        视图的行为有点不同,请参阅Create View

        【讨论】:

        • 您指的是参考文件的哪一部分?我找不到与选择执行差异相关的内容。
        • " 视图定义在创建时被“冻结”,因此之后对基础表的更改不会影响视图定义。例如,如果视图在表上定义为 SELECT *,则 new稍后添加到表中的列不会成为视图的一部分。"
        【解决方案4】:

        SQL Server 中的索引视图通常称为“物化视图”,MySQL 不支持这种视图。与其他供应商相比,MySQL 的 VIEW 支持相当有限 - restrictions are listed in their documentation

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

        【讨论】:

          猜你喜欢
          • 2012-05-27
          • 2013-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 2011-02-02
          相关资源
          最近更新 更多