gpt4 book ai didi

MySQL:优化查询以进行评分计算

转载 作者:行者123 更新时间:2023-11-29 02:28:51 25 4
gpt4 key购买 nike

我有一个数据表,我用它来做一些计算。计算后的结果数据集如下所示:

+------------+-----------+------+----------+
| id_process | id_region | type | result |
+------------+-----------+------+----------+
| 1 | 4 | 1 | 65.2174 |
| 1 | 5 | 1 | 78.7419 |
| 1 | 6 | 1 | 95.2308 |
| 1 | 4 | 1 | 25.0000 |
| 1 | 7 | 1 | 100.0000 |
+------------+-----------+------+----------+

另一方面,我还有其他表格,其中包含一组用于对计算结果进行分类的范围。范围表如下所示:

 +----------+--------------+---------+
| id_level | start | end | status |
+----------+--------------+---------+
| 1 | 0 | 75 | Danger |
| 2 | 76 | 90 | Alert |
| 3 | 91 | 100 | Good |
+----------+--------------+---------+

我需要做一个查询,在计算时将相应的“状态”列添加到每个值。目前,我可以将以下字段添加到计算查询中:

select
...,
...,
[math formula] as result,
(select status
from ranges r
where result between r.start and r.end) status
from ...
where ...

它工作正常。但是当我有很多行(超过 200K)时,计算查询变得很慢。

我的问题是:是否有某种方法可以在不执行该子查询的情况下找到该“状态”值?

有人以前做过类似的事情吗?

谢谢

最佳答案

是的,你正在寻找一个子查询并加入:

select s.*, r.status
from (select s.*
from <your query here>
) s left outer join
ranges r
on s.result between r.start and r.end

显式 join 通常比嵌套 select 优化得更好。不过,在本例中,ranges 表看起来很小,所以这可能不是性能问题。

关于MySQL:优化查询以进行评分计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16112820/

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