我对数据库不是很好,所以请记住,即使解决方案听起来像每个人都已经尝试过的东西,请发布它,因为我可能还没有尝试过它,如果它有效,它将节省大量时间。
我有两个表:
items: ~40,000 行inventory: ~1,000,000 行我有一个的相匹配的查询inventory与items旧系统做的方式,并更新itemid列inventory表,到id匹配行的items表(工作与新系统)。
问题是查询需要永远,并且我必须运行非常相似的查询以优先考虑相似的匹配,因此等待这段时间并不是很长,因为旧数据库中的数据根本不一致,所以我必须不断地调整、重新运行、调整、重新运行等。当库存表中只有 250,000 行时,每个查询需要 40 多分钟。
简而言之,我需要使这个查询更快:
UPDATE inventory r
JOIN items t ON (FIND_IN_SET(r.orderNumber,
REPLACE(
REPLACE(
REPLACE(t.orderNumber,'/',','),
' ', ''),
'[]',',')
)
AND r.selected_number != '99999'
AND r.guideid = t.guideid
AND (r.itemid IS NULL OR r.itemid = '')
)
SET r.itemid = t.id
Run Code Online (Sandbox Code Playgroud)
我的索引是(逗号分隔显然是复合的,请原谅它们由 SQLYog 自动生成的名称):
items 桌子:
PRIMARY => `id`
guideid => `guideid`, `orderNumber`
guideid_2 => …Run Code Online (Sandbox Code Playgroud)