gpt4 book ai didi

mysql - SQL查询性能优化——取对应A的max(B)

转载 作者:行者123 更新时间:2023-11-29 05:22:53 28 4
gpt4 key购买 nike

我有一个看起来像这样的数据库方案(参见 http://sqlfiddle.com/#!2/4c9b4/1/0):

 create table t( id int,  dataA int, dataB int);
insert into t select 1 ,1 ,1;
insert into t select 2 ,1 ,2;
insert into t select 3 ,1 ,3;
insert into t select 4 ,2 ,1;
insert into t select 5 ,2 ,2;
insert into t select 6 ,2 ,4;
insert into t select 7 ,3 ,1;
insert into t select 8 ,3 ,2;
insert into t select 9 ,4 ,1;

以及一个 SQL 查询,用于获取与“dataA”对应的最大“dataB”的“dataA”列表

SELECT * FROM t a WHERE dataB = (SELECT MAX(dataB) FROM t b WHERE b.dataA = a.dataA)

它工作正常,但是在我的数据集上运行最多可能需要 90 秒。

我怎样才能提高这个查询的性能?

最佳答案

也许MySQL即使对于重复的dataA也会一次又一次地执行子查询。下面的语句只是为每个 dataA 找到一次 max(dataB)。剩下的就是一个简单的连接。希望这会更快。

select t.*
from t
join (select dataA, max(dataB) as maxDataB from t group by dataA) max_t
on t.dataA = max_t.dataA and t.dataB = max_t.maxDataB;

编辑:这是您的 SQL fiddle :http://sqlfiddle.com/#!2/4c9b4/2 .

关于mysql - SQL查询性能优化——取对应A的max(B),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23561984/

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