gpt4 book ai didi

sql - MYSQL 行转列性能问题

转载 作者:行者123 更新时间:2023-11-29 05:45:32 24 4
gpt4 key购买 nike

我正在执行一个将行转换为列的查询,类似于 this post但是遇到了性能问题。这是查询:-

SELECT
Info.Customer,
Answers.Answer,
Answers.AnswerDescription,
Details.Code1,
Details.Code2,
Details.Code3
FROM
Info
LEFT OUTER JOIN Answers
ON Info.AnswerID = Answers.AnswerID
LEFT OUTER JOIN
(SELECT
ReferenceNo,
MAX(CASE DetailsIndicator WHEN 'cde1' THEN DetailsCode ELSE NULL END ) Code1,
MAX(CASE DetailsIndicator WHEN 'cde2' THEN DetailsCode ELSE NULL END ) Code2,
MAX(CASE DetailsIndicator WHEN 'cde3' THEN DetailsCode ELSE NULL END ) Code3
FROM DetailsData
GROUP BY ReferenceNo) Details
ON Info.ReferenceNo = Details.ReferenceNo
WHERE Info.Date BETWEEN x AND y

返回的行不到300行,但是Details表大约有18万行。查询需要 45 秒才能运行一半的时间。请注意,内部查询需要 7 秒才能运行。

当我在 MYSQL 中键入 show processlist; 时,它卡在“发送数据”上。

关于性能问题可能是什么有什么想法吗?

最佳答案

首先,查询“详细信息”结果的内部子选择是针对所有条目进行查询……这是您想要的吗?我不这么认为。您似乎只需要基于符合外部日期检查条件的引用编号的结果。

所以,我会更改您的内部选择以包括...

FROM DetailsData 
where DetailsData.ReferenceNo IN
( select distinct Info2.ReferenceNo
from Info Info2 where Info2.Date between x and y )
GROUP BY ReferenceNo) Details

这样,您只会获得与相关日期范围内的引用编号相关的详细信息。

关于sql - MYSQL 行转列性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2652963/

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