3

私は2つのテーブルを持っています

stock_details(1M+ レコード) フィールドあり

billid

itemid

groupid

qty

stock_details索引index1( itemidbillid) およびindex2( itemid)

itemmaster(10,000 件以上のレコード) フィールドあり

itemid

groupid

itemmasterindex1( itemid) とindex2( groupid)のインデックスがあります

以下のクエリは、完了するまでに数分かかります。私はそれが正常だとは思わない。実際に更新されるレコードは、わずかしかないか、まったくない可能性があります。クエリ用にすべてのインデックスが配置されていると思います

UPDATE Stock_details A,Db2.ItemMaster B 
SET A.Groupid=B.Groupid
WHERE A.Itemid=B.itemID AND A.Groupid<>B.GroupId

選択クエリで Explain を実行しました

EXPLAIN SELECT A.groupid FROM Stock_details A,db2.ItemMaster B 
WHERE A.Itemid=B.itemID AND A.Groupid<>B.GroupId

結果はこちら http://i.imgur.com/IR5iWX7.png

4

2 に答える 2

1

よくわかりません..しかし、これを試してみてください...

1) itemid と group id のインデックスを一緒に使用すると役立つ場合があります

2)

UPDATE (Stock_details A,Db2.ItemMaster B WHERE A.Itemid=B.itemID AND A.Groupid<>B.GroupId から Groupid として A.Groupid,B.Groupid を選択) k set k.Groupid=k.Groupids

于 2013-04-06T13:30:25.490 に答える
1

クエリの「no​​t」部分は効果的にインデックスを作成できないため、各行をスキャンする必要があります。

これは定期的に実行しなければならないものだと思います(そうでなければ、どれだけ時間がかかったかは気にしません)。できることの 1 つは、前回の実行時間を追跡し、その時間以降に更新された行のみを考慮することです。

于 2013-04-06T13:19:49.183 に答える