Insert into select语句把生产服务器炸了
场景:使用MySQL存储千万级数据量并根据城市进行分表,从总表对分表插入数据时很慢很慢原因:在默认的事务隔离级别下:insert into t2 select * from t1加锁规则是:t2表锁,t1逐步锁(扫描一个锁一个)。解决方案:使用insert into tablA select * from tableB语句时,一定要确保tableB后面的where,...
·
场景:
使用MySQL存储千万级数据量并根据城市进行分表,从总表对分表插入数据时很慢很慢
原因:
在默认的事务隔离级别下:
insert into t2 select * from t1
加锁规则是:t2表锁,t1逐步锁(扫描一个锁一个)。
解决方案:
使用insert into tablA select * from tableB语句时,一定要确保tableB后面的where,order或者其他条件,都需要有对应的索引,来避免出现tableB全部记录被锁定的情况。
INSERT INTO t2 SELECT
*
FROM
t1 FORCE INDEX (idx)
WHERE
字段 <= xxx;
更多推荐
所有评论(0)