gpt4 book ai didi

mysql - 特定情况下更新速度更快: Join Large with equals or smaller with >- and <=

转载 作者:行者123 更新时间:2023-11-29 21:01:56 25 4
gpt4 key购买 nike

我有一个大型主表 TableA,包含 1200 万条记录。其核心是:

表A:|--FieldA--|--FieldP--|--FieldS--|--FieldH--|--ValueField--|--FieldX--|

我从中创建了两个子表:

TableB 包含基于 FieldA、FieldP、FieldS 的大约 500 万条唯一记录,其中我还推送了 Value,因为我不需要 FieldX。我

表B: |--FieldA--|--FieldP--|--FieldS--|--FieldH--|--ValueField

TableC 包含大约 200,000 条记录,其中提取每个唯一 FieldH、FieldP、FieldS 的上限值和下限值字段:

表C: |--FieldP--|--FieldS--|--FieldH--|--MaxValue--|--MinValue--|

我最初忘记将 FieldH 推送到 TableB 中,并且在此期间做了很多工作,因此无法重做该步骤。

我无法测试性能,因此只需提出以下问题,希望这是足够的信息:

要使用 TableA 中开始的 FieldH 数据更新 TableB,我有两种选择:

Update TableB as T1
Inner Join TableA as T2
On T1.FieldA=T2.FieldA
And T1.FieldP=T2.FieldP
And T2. FieldS=T2.FieldS
Set T1.FieldH=T2.FieldH

我在每个选定字段上都有索引。

这对我来说似乎是一个巨大的加入。

我的另一个选择是使用范围并通过更多计算进行较小的连接:

Update TableB as T1
Inner Join TableC as T2
On T1.ValueField>=T2.MinValue
And T1.ValueField<=T2.MaxValue
Set T1.FieldH=T2.FieldH

我在值字段上也有一个索引。

显然,在后一种情况下,优点是它的连接要小得多,但另一方面,我向每个记录添加数字计算。我对索引、连接或计算的内部工作原理了解不够,甚至无法对哪个更好做出有根据的猜测。

我希望我在这里提供了清晰的图片。尽量不要添加更多并使问题变得过于复杂,如果有任何添加数据会有所帮助,我很乐意提供/详细说明。

最佳答案

我将向您推荐这个问题(我最终回答了):

Faster Update in specific case: Join Large with equals or smaller with >- and <=

这是这个的产物。我意识到这不是 >=<= 而是我的索引本身,特别是我需要创建一个复合索引并让 MySql 选择它。因此解决了这个问题。

长话短说,因为我需要连接两个具有串联 varchar 字段的大表,所以我创建了一个中间表并使用这些 ID 来连接。如果您需要详细信息,请参阅上面的链接。

最终,即使使用 >=<=,它也能很好地工作,事实上,它最终在一分多钟的时间内对 500 万条记录到 500 万条记录的表进行了 52k 次更新(之前每条记录需要 10 秒) )。

关于mysql - 特定情况下更新速度更快: Join Large with equals or smaller with >- and <=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37148197/

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