gpt4 book ai didi

mySQL 子查询比 2 个单独的查询慢

转载 作者:可可西里 更新时间:2023-11-01 08:16:07 27 4
gpt4 key购买 nike

我正在为一个简单的子查询而烦恼。我有以下查询女巫运行了 30 多秒:

SELECT DISTINCT SUBSTRING( 6pp, 1, 4 ) AS postcode
FROM 6pp
WHERE gemeenteID
IN (
SELECT gebiedID
FROM tmp_orderimport
WHERE typeGebied = 'Gemeente'
AND idorder =1733
AND STATUS = TRUE );

解释: Explain

如果我将查询分成 2 个查询并首先运行 IN 部分,整个过程不会超过一秒钟。但我当然更喜欢使用一个查询。这些表在 MYISAM 中。有什么建议吗?

更新:

以 Gordon Linoff 为榜样。我将 SQL 更改为:

SELECT DISTINCT SUBSTRING( 6pp, 1, 4 ) AS postcode
FROM `6pp`
WHERE EXISTS (SELECT 1
FROM tmp_orderimport oi
WHERE oi.gebiedID = `6pp`.gemeenteID AND
typeGebied = 'Gemeente' AND idorder = 1733 AND STATUS = TRUE
);

并在 tmp_orderimport(gebiedID, typeGebied, idorder, status) 上添加了一个索引。现在查询运行不到 4 秒。

新解释: New SQL explain

最佳答案

尝试使用 exists 代替:

SELECT DISTINCT SUBSTRING( 6pp, 1, 4 ) AS postcode
FROM `6pp`
WHERE EXISTS (SELECT 1
FROM tmp_orderimport oi
WHERE oi.gebiedID = `6pp`.gemeenteID AND
typeGebied = 'Gemeente' AND idorder = 1733 AND STATUS = TRUE
);

您还可以使用 tmp_orderimport(gebiedID, typeGebied, idorder, status) 上的索引来加快速度。

IN 与子查询一起使用时,MySQL 可能效率低下(有时并且取决于版本)。 EXISTS 通常可以解决问题。具体问题是每次比较都要运行子查询。当您创建一个临时表时,您可以规避它。

关于mySQL 子查询比 2 个单独的查询慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621289/

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