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中文网其他相关文章!