【发布时间】:2018-01-10 18:00:14
【问题描述】:
我有这个查询:
"explain UPDATE requests R JOIN profile as P ON R.intern_id = P.intern_id OR R.intern_id_decoded = P.intern_id OR R.intern_id_full_decode = P.intern_id SET R.found_id=P.id WHERE R.id >= 28000001 AND R.id <= 28000001+2000000 AND R.found_id is NULL"
1 UPDATE R NULL range PRIMARY,intern_id_customer_id_batch_num,id_found_id PRIMARY 4 NULL 3616888 10.00 Using where
1 SIMPLE P NULL ALL intern_id_dt_snapshot,intern_id NULL NULL NULL 179586254 27.10 Range checked for each record (index map: 0x6)
执行该查询大约需要 40 秒,它从 200 万行中更新了 5000-10000 行。
我目前正在更新 200 万行“作业”以使联接执行得更快。 目前全表1.7亿条记录。
解释显示第二部分没有使用索引,我不确定这是否正确。 intern_id 字段是 varchars,found_id 和 id 是 INT
解释输出看起来是否正常工作? 我注意到第二行没有使用索引,不知道这是否正常。
【问题讨论】:
-
我似乎记得 MySQL 在您执行范围时停止使用索引。尝试把 R.found_id IS NULL 先放。
-
遗憾的是输出没有变化