2

約 24 時間実行される SQL クエリがあります。最適化する方法があれば教えていただきたいです。

クエリは次のとおりです。

update r, t  set r.a1 = t.a2, r.b1 = t.b1  where r.c = t.c and r.d1 = t.d2 and r.e1 = t.e2 and r.f1 = t.f2;

テーブル r には ~2,000,000 行があり、次のように定義されています。

Field  Type      Collation  Null  Key  Default Extra         
-----  --------  ---------  ----  ---  ------  --------------

id     int(11)   (NULL)     NO    PRI  (NULL)  auto_increment

a1     blob      (NULL)     YES        (NULL)                

e1     tinyblob  (NULL)     YES   MUL  (NULL)                

f1     int(11)   (NULL)     YES   MUL  (NULL)                

c      int(11)   (NULL)     YES   MUL  (NULL)                

b1     int(11)   (NULL)     YES   MUL  (NULL)                

d1     int(11)   (NULL)     YES   MUL  (NULL)                

テーブル t には最大 1,200,000 行あり、次のように定義されています。

Field  Type      Collation  Null  Key     Default  Extra         

-----  --------  ---------  ----  ------  -------  --------------

c      int(11)   (NULL)     NO    MUL     0                      

d2     int(11)   (NULL)     NO    MUL     0                      

e2     tinyblob  (NULL)     YES   MUL     (NULL)                 

f2     int(2)    (NULL)     NO    MUL     (NULL)                 

a2     blob      (NULL)     YES           (NULL)                 

b1     int(11)   (NULL)     YES           0                      

id     int(11)   (NULL)     NO    PRI     (NULL)   auto_increment

クエリを最適化する方法があるかどうか知りたいですか?

ありがとう!

4

3 に答える 3

0

これを試して

update r left join t on r.c = t.c and r.d1 = t.d2 and r.e1 = t.e2 and r.f1 = t.f2 set r.a1 = t.a2, r.b1 = t.b1

また、いくつかの変更を行います

  • c,d1,e1 列をテーブル r でインデックス付けする

  • c,d2,e2 列をテーブル t のインデックス付きにする

于 2013-10-30T08:27:41.063 に答える
0

インデックス キーは、where ステートメントと同じ順序にする必要があります。 rテーブル キー:

c,d1,e1,f1

およびtテーブル キー:

c,d2,e2,f2

r列のテーブルにキーが必要b1ですか?

于 2013-10-30T07:42:52.290 に答える