首页 > 数据库 > mysql教程 > 为什么视图查询与直接表查询相比表现出性能差异?

为什么视图查询与直接表查询相比表现出性能差异?

Susan Sarandon
发布: 2024-10-23 23:13:29
原创
386 人浏览过

Why Does a View Query Exhibit a Performance Discrepancy Compared to a Direct Table Query?

MySQL 查看查询性能差异

问题:

包含大约 100,000 个用户的数据库表记录在直接查询和使用视图的查询之间表现出显着的性能差异。直接访问表的查询的计划成本为 5200,而访问视图的查询的计划成本为 100,000。

说明:

性能差异为由用于执行视图的算法引起。本例中的视图使用“temptable”算法,该算法在执行 WHERE 子句指定的过滤操作之前将基础表中的所有行检索到临时表中。相比之下,直接查询使用“合并”算法,直接对基础表的索引数据进行过滤操作。

视图中的 WHERE 子句

视图中的WHERE子句在视图从基础表中检索所有行后应用。这意味着即使视图可能是使用特定的过滤条件创建的,针对视图的查询中的 WHERE 子句仍然应用于从临时表中检索的每一行。

解决方案

要解决此性能问题,应使用“合并”算法创建视图。这可以通过使用“物化视图”选项来实现。物化视图是视图的预先计算的副本。它存储在物理表中,以便针对物化视图的查询可以使用“合并”算法进行过滤。

示例:

创建物化视图使用“合并”算法,使用以下语法:

创建物化视图后,针对它的查询将具有更低的计划成本和更高的性能。

以上是为什么视图查询与直接表查询相比表现出性能差异?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板