首页 >数据库 >mysql教程 >为什么我的 WHERE IN 中带有子查询的 MySQL 查询如此慢?

为什么我的 WHERE IN 中带有子查询的 MySQL 查询如此慢?

Linda Hamilton
Linda Hamilton原创
2024-11-15 15:54:03479浏览

Why is My MySQL Query with a Subquery in WHERE IN So Slow?

WHERE IN 中的子查询导致 MySQL 性能下降

当尝试识别和检查 MySQL 数据库中的重复行时,结果是一个看似简单的查询性能出乎意料地缓慢。初始查询旨在选择“relevant_field”列中具有重复值的所有行,使用以下结构:

SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1

此查询执行速度很快,但是当构造后续查询来检索'some_table' 的 'relevant_field' 值与第一个查询中的值匹配,性能急剧下降。

SELECT *
FROM some_table 
WHERE relevant_field IN
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
)

性能缓慢可归因于子查询作为相关查询的性质。在这种情况下,主查询处理的每一行都会执行子查询,从而导致过多的开销。

为了缓解此性能问题,通过选择将相关子查询转换为非相关子查询是有利的子查询中的所有列。

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
)

此修改后的查询利用 MySQL 的优化功能来有效检索重复行,而不会产生与原始相关子查询相关的性能损失。

以上是为什么我的 WHERE IN 中带有子查询的 MySQL 查询如此慢?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn