MySQL 查看查询性能差异
问题:
包含大约 100,000 个用户的数据库表记录在直接查询和使用视图的查询之间表现出显着的性能差异。直接访问表的查询的计划成本为 5200,而访问视图的查询的计划成本为 100,000。
说明:
性能差异为由用于执行视图的算法引起。本例中的视图使用“temptable”算法,该算法在执行 WHERE 子句指定的过滤操作之前将基础表中的所有行检索到临时表中。相比之下,直接查询使用“合并”算法,直接对基础表的索引数据进行过滤操作。
视图中的 WHERE 子句
视图中的WHERE子句在视图从基础表中检索所有行后应用。这意味着即使视图可能是使用特定的过滤条件创建的,针对视图的查询中的 WHERE 子句仍然应用于从临时表中检索的每一行。
解决方案
要解决此性能问题,应使用“合并”算法创建视图。这可以通过使用“物化视图”选项来实现。物化视图是视图的预先计算的副本。它存储在物理表中,以便针对物化视图的查询可以使用“合并”算法进行过滤。
示例:
创建物化视图使用“合并”算法,使用以下语法:
创建物化视图后,针对它的查询将具有更低的计划成本和更高的性能。
以上是为什么视图查询与直接表查询相比表现出性能差异?的详细内容。更多信息请关注PHP中文网其他相关文章!