gpt4 book ai didi

MySQL "IN"使用子查询查询非常慢,但使用显式值查询速度很快

转载 作者:IT老高 更新时间:2023-10-28 23:50:56 25 4
gpt4 key购买 nike

我有一个 MySQL 查询(Ubu 10.04、Innodb、Core i7、16Gb RAM、SSD 驱动器、MySQL 参数优化):

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')

表 em_link_data 大约有 700 万行,em_link 有几千行。完成此查询大约需要 18 秒。但是,如果我替换结果子查询并执行以下操作:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);

那么查询将在不到 1 毫秒的时间内运行。子查询单独运行不到1ms,列linkid被索引。

如果我将查询重写为连接,也少于 1 毫秒。为什么带有子查询的“IN”查询这么慢,为什么带有值的查询这么快?我无法重写查询(购买的软件),所以我希望有一些调整或提示来加速这个查询!任何帮助表示赞赏。

最佳答案

每次评估子查询时都会执行它们(无论如何在 MySQL 中,不是所有 RDBMS),即您基本上运行了 700 万个查询!如果可能,使用 JOIN 会将其减少到 1。即使添加索引提高了它们的性能,您仍在运行它们。

关于MySQL "IN"使用子查询查询非常慢,但使用显式值查询速度很快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com