MySQL中把数据从一个数据表导入到另一个数据表,SQL的写法及效率示例
浏览数 191741
赞
(0)
MySQL中把数据从一个数据表导入到另一个数据表,并且要按新的ID规则修改成新的ID,在分表时经常需要导数据,以下做个SQL示例
[SQL] INSERT INTO `comment_1` (id, news_id, userid, `content`, `status`)
SELECT concat(11, id), news_id, userid, `content`, `status` FROM `comment` WHERE right(news_id,1)="1";
受影响的行: 708418
时间: 69.642s
新闻的评论表中现有数据700多万,欲把它拆分成10张表存放,把评论信息按新闻的ID尾数存放到不同的评论表中,分表的命名分别是comment_0、comment_1、comment_2 ----- comment_8、comment_9。
开发环境中,执行这条语句导了70多万数据到其中一个分表,用时69.642秒
因为回复表中没有新闻的ID,所在需要联表读取,两个表联表读取,再存到回复的子表中去,速度只有不联表读的1/3左右
INSERT INTO `comment_reply_3` (id, comment_id, `content`, create_time, `status`)
SELECT concat(13, r.id), concat(13, r.comment_id), r.`content`, r.create_time, r.`status` FROM `comment_reply` r, `comment` c WHERE r.comment_id=c.id AND right(c.news_id,1)="3";
受影响的行: 235756
时间: 60.166s
[SQL] INSERT INTO `comment_1` (id, news_id, userid, `content`, `status`)
SELECT concat(11, id), news_id, userid, `content`, `status` FROM `comment` WHERE right(news_id,1)="1";
受影响的行: 708418
时间: 69.642s
新闻的评论表中现有数据700多万,欲把它拆分成10张表存放,把评论信息按新闻的ID尾数存放到不同的评论表中,分表的命名分别是comment_0、comment_1、comment_2 ----- comment_8、comment_9。
开发环境中,执行这条语句导了70多万数据到其中一个分表,用时69.642秒
因为回复表中没有新闻的ID,所在需要联表读取,两个表联表读取,再存到回复的子表中去,速度只有不联表读的1/3左右
INSERT INTO `comment_reply_3` (id, comment_id, `content`, create_time, `status`)
SELECT concat(13, r.id), concat(13, r.comment_id), r.`content`, r.create_time, r.`status` FROM `comment_reply` r, `comment` c WHERE r.comment_id=c.id AND right(c.news_id,1)="3";
受影响的行: 235756
时间: 60.166s