我有这个问题:
UPDATE invitations SET added=added+1 WHERE chat_id NOT IN (SELECT * FROM (SELECT LEFT(name,14) AS chat_id FROM rules WHERE name LIKE '-%-credit' AND value< 1522744396) AS iner)
每次执行它都需要很长时间才能完成我想做的事情。 例如,我现在已经运行它,到目前为止已经花费了1600秒而且还没有发生任何事情。 在show proccesslist中,我看到它处于“发送数据”状态。 这个查询出了什么问题?
表规则最多有100K行,内部查询返回2K行。 内部查询的结果是一列,如下所示: chat_id -1001167043635 -1001167043643 ...
当我单独运行内部查询时,它需要0.007秒。
邀请表有500K行,如下所示: user_id | chat_id |添加 55545323 | -1001167043635 | 23
如果你告诉我我做错了什么并告诉我如何解决它,将不胜感激。
答案 0 :(得分:0)
为什么要运行“选择*”?内部选择不满足您的请求吗?
您是否在chat_id上设置了索引?
答案 1 :(得分:0)
您可能认为NOT IN中的子查询仅对整个查询执行一次。问题是,对于OUTER QUERY中的每一行,INNER QUERY将被执行一次。我们曾经遇到过这个问题。检查mysql EXPLAIN查询。