我有2张桌子
带有字段的 stock_details
(1M +记录)
billid
itemid
groupid
qty
stock_details
索引index1
(itemid
,billid
)和index2
(itemid
)
itemmaster
(10K +记录)
itemid
groupid
itemmaster
包含索引index1
(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 SELECT A.groupid FROM Stock_details A,db2.ItemMaster B
WHERE A.Itemid=B.itemID AND A.Groupid<>B.GroupId
答案 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