小编Rya*_*n M的帖子

使用 JOIN 永远执行更新查询

我对数据库不是很好,所以请记住,即使解决方案听起来像每个人都已经尝试过的东西,请发布它,因为我可能还没有尝试过它,如果它有效,它将节省大量时间。

我有两个表:

  • items: ~40,000 行
  • inventory: ~1,000,000 行

我有一个的相匹配的查询inventoryitems旧系统做的方式,并更新itemidinventory表,到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)

mysql performance query-performance

3
推荐指数
1
解决办法
2884
查看次数

标签 统计

mysql ×1

performance ×1

query-performance ×1