Mysql 更新包含25000多个条目的表
我想根据在另一个表中的搜索,尝试在一个SQL表中设置两个值。我的问题如下:Mysql 更新包含25000多个条目的表,mysql,batch-processing,Mysql,Batch Processing,我想根据在另一个表中的搜索,尝试在一个SQL表中设置两个值。我的问题如下: UPDATE $postmeta SET meta_key = '_bbps_topic_status', meta_value = '1' WHERE post_id IN ( SELECT ID FROM $posts WHERE post_type='topic' ) 我想对包含25148行的整个表执行此操作,但即使在增加了服务器上的所有限制之后,也会出现内存错误
UPDATE $postmeta
SET meta_key = '_bbps_topic_status',
meta_value = '1'
WHERE post_id IN (
SELECT ID
FROM $posts
WHERE post_type='topic'
)
我想对包含25148行的整个表执行此操作,但即使在增加了服务器上的所有限制之后,也会出现内存错误。我知道MySQL不允许一组批处理操作,比如说500个,但是有没有办法编写一个脚本,将这个操作分成更小的块
提前谢谢
编辑:查询包括日期范围:
UPDATE $postmeta
SET meta_key = '_bbps_topic_status',
meta_value = '1'
WHERE post_id IN (
SELECT ID
FROM $posts
WHERE post_type='topic'
AND DATE_SUB(
CURDATE(),
INTERVAL 30 DAY
) <= post_date
)
使用join方法和$POSTETA表中的post_id索引将非常有用
UPDATE $postmeta m
JOIN $posts p ON(p.ID = m.post_id )
SET m.meta_key = '_bbps_topic_status',
m.meta_value = '1'
WHERE p.post_type='topic'
AND p.post_date <= NOW() - INTERVAL 30 DAY
注意,您使用的子查询将针对每一行运行,而不是在日期列上使用join ALD add index来提高查询的性能Hey Khalid-我添加了一个更复杂的查询,因为我不知道如何在您使用的join命令中包含该查询。@RoboRob在查询时使用date\u子部分的目的是什么不比较这个表达式的结果?我正在尝试获取所有“topic”类型的帖子,这些帖子的发布时间超过30天。当我在SELECT语句中运行它时,它似乎满足了我的要求。对不起,我的错误,比较是错误的