为什么我的 WHERE IN(子查询)查询很慢,但从子查询引用视图却很快?

DDD
发布: 2024-11-19 21:40:03
原创
455 人浏览过

Why is my WHERE IN (subquery) query slow, but referencing a view from the subquery is fast?

MySQL 性能难题:子查询性能异常

当尝试从数据库检索重复记录时,SQL 查询利用子查询来识别相关行表现出令人惊讶的性能差异。

初始查询通过对特定字段进行分组和过滤来有效隔离重复记录,执行速度很快。然而,随后的查询试图检索其值与重复集中的值相匹配的所有行(使用 WHERE ... IN(子查询)构造实现)变得异常缓慢。

尽管存在索引相关领域,执行需要几分钟才能完成。由于怀疑数据库限制,从子查询创建了一个视图,并修改了父查询以引用该视图。这导致了近乎瞬时的执行。

揭开罪魁祸首:相关查询问题

经过调查,发现性能缓慢源于查询的相关性质子查询。在相关子查询中,内层查询引用了外层查询的某个字段,导致外层查询中的每一行都执行多次子查询,导致效率降低。

解决瓶颈:隔离子查询

为了减轻性能损失,通过从子查询中选择所有列并为其分配别名,将相关子查询转换为非相关子查询。这保证了子查询只执行一次,显着提高了查询性能。

修改后的父查询,现在引用不相关的子查询结果,以期望的效率执行,解决了性能问题。

以上是为什么我的 WHERE IN(子查询)查询很慢,但从子查询引用视图却很快?的详细内容。更多信息请关注PHP中文网其他相关文章!

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