我有两个关系表,它们都需要数据。第一个(主)表包含大约90k行。第二个表包含大约200000多行。
我需要将第二个表的一些数据添加到我从第一个表得到的结果中。目前,我分两部分进行:
首先:我从主表中选择所需的行,这会非常快。
$records = getData($conn, "
SELECT id
from Main
where contains_tags is not null
and contains_mediums is not null
and contains_techniques is not null
limit 100
");
-然后我检查每个记录,从第二个表中添加额外的数据,但这需要时间(100条记录需要1分钟,50分钟-5公里记录需要100分钟)。最后,我需要对主表的大约5-10k行运行这个查询)。有没有办法加快这个过程?
foreach ($records as $r => $record) {
$records[$r]['mediums'] = getData($conn, "SELECT medium from mediums where kleding_id = ".$record['id']."");
kleding_id = ".$record['id']."");
}
这是两个查询完成后所需的输出:
[1] => Array
(
[id] => 15
[mediums] => Array
(
[0] => Array
(
[medium] => wol
)
[1] => Array
(
[medium] => katoen
)
)
)
所以我的问题是如何在尽可能短的时间内高效地运行这个查询结构。
主表如下所示:
次表如下所示:
如果有什么不清楚的地方,请告诉我,以便我能澄清。
3条答案
按热度按时间jv2fixgn1#
如果您需要提高性能,请确保您有一个适当的索引表mediums列kleding\u id
请记住,限制(对于不是最新的db版本)通常对结果起作用..a并且在达到前100个之后不会中断
dtcbnfnu2#
您可以在一个查询中完成。但它适用于mysql verison 5.7及以上版本。
还要确保你有一个关于kleing\u id的索引。
iyfjxgzm3#
不需要迭代第一个结果并多次调用第二个表。这将永远是缓慢的。
尝试
inner join
在一条sql语句中聚合两个表中的数据。