我想执行一个MySQL查询,以删除Wp_posts
post_parent
行Wp_posts
行,post_type
行设置为product;
所以我做了
INSERT INTO temp (SELECT DISTINCT id FROM wp_posts WHERE post_type = "product")
(插入4k行)
DELETE FROM wp_posts WHERE post_parent IN (SELECT tid FROM temp)
...
大约100秒后,它返回
ERROR 1317(70100):查询执行中断
什么可能使这个查询如此血腥缓慢?
答案 0 :(得分:4)
您需要在max_allowed_packet
配置文件中将my.ini
更改为更高的值。
这可能会有所帮助:
Packet Too Large
通信数据包是发送到MySQL服务器的单个SQL语句,发送到客户端的单个行,或从主复制服务器发送到从属服务器的二进制日志事件。
可以传输到MySQL 5.5服务器或客户端的最大可能数据包是1GB。
答案 1 :(得分:2)
某些版本的MySQL以非常低效的方式使用子查询实现in
。将其更改为相关的exists
子句:
DELETE FROM wp_posts
WHERE exists (SELECT 1 FROM temp where temp.tid = wp_posts.post_parent)