我有一个大的主表,TableA有1200万条记录。它的核心是:在特定情况下更快更新:使用等于或小于等于或大于等于>加入大于等于< - 并且<=
表A: | --FieldA-- | --FieldP-- | --FieldS-- | --FieldH-- | --ValueField-- | --FieldX- - |
我创建的两个子表:
表B基于FIELDA,FieldP,领域,我也推高值,因为我并不需要FieldX约500万唯一的记录。我
表B: | --FieldA-- | --FieldP-- | --FieldS-- | --FieldH-- | --ValueField
表C约20万人,其中记录拉到上并为每个独特FieldH,FieldP,场下的值字段:
表C: | --FieldP-- | --FieldS-- | --FieldH-- | --MaxValue-- | --MinValue- - |
我忽略了最初将FieldH推入TableB中,并且在此期间做了大量工作,因此无法重做该步骤。
没有办法,我来测试性能,因此只是问以下问题希望这是足够的信息:
与它开始与FieldH数据更新表B TableA中我有两个选择:
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
我对值字段的索引以及。
显然在后一种情况下,优点是它是一个更小的连接,但另一方面,我将数字计算添加到每条记录。我对于索引,连接或计算的内部工作知之甚少,甚至不知道哪个更好。
我希望我在这里提供了一个清晰的图片。试着不要添加更多并且过度复杂的问题,如果有任何添加数据会帮助我很乐意提供/详细说明。
您是否尝试过“复杂”连接?看起来真的很难为db –
@JuanCarlosOropeza复杂你的意思是计算?到目前为止,我还没有尝试各种各样的加入都花了相当长的时间,所以让任何一个rip变成一个猜谜游戏。它从你的评论看来,但我可能高估了开销> = <=将要添加。 – user3649739
哦,我现在看到它。你想用'表A'或'表C'更新'表B'。我想你害怕使用一个1200万行“表A”。首先你的意思是“不能测试性能”?你应该可以运行'EXPLAIN ANALYSE' [** MySQL **](http://dba.stackexchange.com/questions/15371/how-do-i-get-the-execution-plan-for-a-查看)这是你可以比较两个查询之间的性能的唯一方法 –