gpt4 book ai didi

mysql - 从另一个表中计算行的更快方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:53 25 4
gpt4 key购买 nike

有没有其他方法可以更快地从另一个表中检索总记录。

这是我的示例 sql 代码:

SELECT *,
(SELECT count(*) from table1 where table1.field2 = table2.field1 AND table1.status ='value1') as total1,
(SELECT count(*) from table1 where table1.field2 = table2.field1 AND table1.status ='value2') as total2
FROM table2

最佳答案

在很多情况下,你的做法是好的:

SELECT t2.*,
(SELECT count(*) from table1 t1 where t1.field2 = t2.field1 AND t1.status = 'value1') as total1,
(SELECT count(*) from table1 t1 where t1.field2 = t2.field1 AND t1.status = 'value2') as total2
FROM table2 t2;

为了提高性能,您需要在 table1(field2, status) 上建立索引。

另一种方法是预先聚合 table1:

select t2.*, t1.total1, t1.total2
from table2 t2 left join
(select t1.field2, sum(status = 'value1') as total1, sum(status = 'value2') as total2
from table1 t1
group by t1.field2
) t1
on t2.field1 = t1.field2;

这在某些情况下会有更好的性能。

哪个效果更好取决于数据。例如,如果 table2 有 1 行,table1 有 1,000,000 行,其中 5 个匹配 table2,那么第一个更好。

如果 table2table1 大,那么第二种方法可能更好。

关于mysql - 从另一个表中计算行的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878130/

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