gpt4 book ai didi

mysql - 如何替换 WHERE 子句中的 WHERE IN 选择以减少请求的执行时间?

转载 作者:行者123 更新时间:2023-11-29 03:16:57 24 4
gpt4 key购买 nike

我在 RAD Studio 10.2 Tokyo 上编写的 C++ 项目中使用 DBF 数据库。为了对该数据库发出请求,我使用了 UniDac Devart 组件(与 MySQL 本身相比,它有点受限)。我遇到的问题是,在请求中使用 WHERE IN 条件时,请求的执行时间太长(有时超过一小时)。

这是我的要求:

SELECT accountrp, SUM(amounteur) AS montant FROM %s 
WHERE doctype='1' AND period<>'00' AND
matchno IN(SELECT matchno FROM %s GROUP BY matchno HAVING SUM(amounteur)<>0)
GROUP BY accountrp

accountrp、doctype、period 是字符,mounteur 是数字。

问题出在 matchno IN 行附近。我想在不使用 IN 的情况下优化请求。我在 Internet 上看到 WHERE IN 条件可以用 INNER JOIN 路口替换,但我不知道这是否是解决方案以及如何执行此操作。

你能帮帮我吗?

最佳答案

第一个建议您可以更改 INNER JOIN 中的 IN 子句
这应该更有效地提高性能

SELECT accountrp, 
SUM(amounteur) AS montant
FROM %s as s
INNER JOIN (
SELECT matchno
FROM %s
GROUP BY matchno
HAVING SUM(amounteur)<>0
) t on t.matchno = s.matchno
WHERE doctype='1' AND period<>'00' AND
GROUP BY accountrp

这是因为 In 子句等同于一组 OR 条件,并且每次针对每个 OR 执行查询.. 内部连接只是两个表之间的连接,并且只执行一次

关于mysql - 如何替换 WHERE 子句中的 WHERE IN 选择以减少请求的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53955616/

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