我有一张有超过1000万行的大桌子.我需要更新以下行:

select *
from customers_card_psp
where status="not_added"
  and psp_id = 2
order by id
limit 50000

因为我在customers_card_psp(psp_id, status)上有一个复合索引,所以上面的查询执行得太快(不到1秒).但是,当我在UPDATE查询中使用它作为子查询时,如下所示:

update customers_card_psp
set status = "failure"
where id in (select id
             from customers_card_psp
             where status="not_added"
               and psp_id = 2
             order by id
             limit 50000)

它抛出:

#1235-此版本的MySQL尚不支持‘Limit&IN/All/Any/Some子查询’

我如何解决这个问题?

推荐答案

你可以加入这张桌子

update customers_card_psp ccp
JOIN (select id
             from customers_card_psp
             where status="not_added"
               and psp_id = 2
             order by id
             limit 50000) cc
ON ccp.id = cc.id
set status = "failure"

Mysql相关问答推荐

我如何才能从MySQL过程中获取LARAVEL端的数据?

插入时发生日期时间字段溢出错误

仅获取我不是最后一个 comments 者的博客帖子

错误 2020 (HY000): 数据包大于 'max_allowed_pa​​cket' 字节,docker 容器内出现 mysql 错误

我可以在姓名和姓名日期之间进行搜索吗?

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

如何将数据导入MySQL中的master/replica struct

MYSQL "Like" 正向和反向词序查询

基于其列之一内的值查询模型

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

在 MySQL 中跨日期和位置计算和排序实体的共现

如何 Select 具有最新的 2 个日期字段的行?

Golang Gorm没有从关联表中检索数据

从终端访问 MAMP 的 MySQL

在 MySQL 中检测 utf8 损坏的字符

MySQL嵌套 Select 查询?

在 WHERE 子句中使用 mysql concat()?

在 Mac 上设置 Laravel php artisan migrate 错误:没有这样的文件或目录

从 MySQL JSON 数据类型中提取不带引号的值

'LIKE ('%this%' OR '%that%') and something=else' 不起作用