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中文网其他相关文章!