首页  >  文章  >  数据库  >  为什么视图的成本比在基础表上执行相同查询的成本高得多?

为什么视图的成本比在基础表上执行相同查询的成本高得多?

Patricia Arquette
Patricia Arquette原创
2024-10-24 00:26:29599浏览

Why Does a View Show Significantly Higher Cost Than Executing Same Query on an Underlying Table?

MySQL 查看性能问题

问题:

用户对表进行查询有 100,000 行,根据特定状态进行过滤时显示出较高的成本 (5200)。使用相同的聚合查询创建视图并在视图上进行过滤会导致显着更高的成本(100,000)。

说明:

成本差异是由于使用的视图算法。视图的默认算法是 temptable,它从基础表中检索所有行,然后应用过滤器。当基于一小部分行进行过滤时,这可能会导致性能不佳。

解决方案:

要解决此问题,应使用以下方式定义视图merge算法,允许使用底层表的索引,提高过滤效率。这可以使用以下语法来完成:

<code class="sql">CREATE OR REPLACE VIEW vw_users AS
SELECT state, COUNT(*) AS cnt
FROM users
WITH MERGE VIEW;</code>

通过合并算法,视图上的查询现在可以利用状态列上的索引,从而降低其成本并提高性能。

以上是为什么视图的成本比在基础表上执行相同查询的成本高得多?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn