我有一個大的主表,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-查看)這是你可以比較兩個查詢之間的性能的唯一方法 –