使用1M +行表更新查询性能

时间:2013-04-06 13:01:43

标签: mysql sql

我有2张桌子

带有字段的

stock_details(1M +记录)

billid

itemid

groupid

qty

stock_details索引index1itemidbillid)和index2itemid

带有字段的

itemmaster(10K +记录)

itemid

groupid

itemmaster包含索引index1itemid)和index2groupid

以下查询需要几分钟才能完成。我认为这不正常。可能只有很少的记录或零记录实际上得到更新。我想我已经为查询提供了所有索引

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

对选择查询进行解释

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

2 个答案:

答案 0 :(得分:1)

无法有效地对查询的“非”部分进行索引,因此必须扫描每一行。

我想这是你必须定期运行的东西(否则你不会在意它需要多长时间)。您可以做的一件事就是跟踪上次运行的时间,并且只考虑自那时起更新的行。

答案 1 :(得分:1)

我不确定..但试试这个,看看......

1)itemid和group id togethewr的索引可能有帮助

2)

UPDATE (选择A.Groupid,B.Groupid作为Groupids来自  Stock_details A,Db2.ItemMaster B.   在哪里A.Itemid = B.itemID   AND A.Groupid&lt;&gt; B.GroupId)k 设置k.Groupid = k.Groupids