首页 > 数据库 > mysql教程 > 为什么 IN 子句中的 MySQL 子查询会导致性能问题?

为什么 IN 子句中的 MySQL 子查询会导致性能问题?

Mary-Kate Olsen
发布: 2024-11-29 05:22:25
原创
682 人浏览过

Why is my MySQL subquery in an IN clause causing performance issues?

MySQL - 子查询相关性降低 IN 子句性能

给定的查询,它使用子查询来识别数据库表中的重复行IN 子句遇到了严重的性能问题。虽然子查询本身执行速度很快,但 IN 子句查询需要相当长的时间。

缓慢的原因

缓慢是由子查询的相关性质引起的。在相关查询中,子查询引用外部查询中的列,使其依赖于外部查询的执行。结果,外表中的每一行都会触发子查询的单独执行。

解决方案

要解决此问题,可以将相关子查询转换为通过选择其中的所有列来实现非相关子查询。这消除了对外部查询的依赖,显着提高了性能:

SELECT * FROM
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
) AS subquery
登录后复制

最终查询

修改后的查询将如下所示:

SELECT *
FROM some_table
WHERE relevant_field IN
(
    SELECT * FROM
    (
        SELECT relevant_field
        FROM some_table
        GROUP BY relevant_field
        HAVING COUNT(*) > 1
    ) AS subquery
)
登录后复制

这个非相关查询的执行速度比原始相关查询快得多。

以上是为什么 IN 子句中的 MySQL 子查询会导致性能问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

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