从一张表垂直拆分成多张表的问题

2013-06-19 17:57:11 +08:00
 revlis7
假定有一张user表,因为字段太多,打算将user表中的各个字段拆分到user_account、user_information、user_status等若干张表。

现在要做的就是将原来user表里的数据,导入到这些新表中去。但是由于原来user表内数据太多,如果每张新表都单独执行导入sql的话,那么每次执行都要遍历一次user表,感觉效率很低。有没有办法可以直接取完一条user的数据后,直接插入新的N张表中,这样只遍历一次user表就可以完成?
4234 次点击
所在节点    MySQL
9 条回复
wayn3h0
2013-06-19 22:59:05 +08:00
1. 遍历一次 执行三个命令
2. 遍历三次 每次执行一个命令

你自个不是说的很明白了么。。。不明白你的疑问在哪里啊在哪里
likuku
2013-06-19 23:22:43 +08:00
「有没有办法可以直接取完一条user的数据后,直接插入新的N张表中,这样只遍历一次user表就可以完成?」

写程序实现嘛,这种指望依靠MYSQL自身的SQL语言来搞不太现实。
xiaogui
2013-06-19 23:34:36 +08:00
1、写程序,分别生成需导至 user_account、 user_information、 user_status等表的 sql 语句;
2、然后分别执行各表若干条 sql 语句。比如将需导入 user_account 表的每 1000 sql 语句导入一次,可以有效降低 sql 语句执行时间。
另考虑中间中断问题,可以使用事务。
msg7086
2013-06-20 07:32:53 +08:00
如果是myiasm的话可以file copy+drop column
rpx
2013-06-20 07:43:24 +08:00
找个etl工具几下搞定。
推荐kettle
Xrong
2013-06-20 08:20:56 +08:00
用php全部读取出来,然后做判断插入各自表中?渣思路路过...
revlis7
2013-06-20 10:13:18 +08:00
本来想用一条SQL搞定N张表

看来只有用另外的脚本去跑了

thanks anyway.
xiaogui
2013-06-20 10:33:46 +08:00
@revlis7 减少数据库操作的时间主要是多条 sql 语句一次导入。如果数据量不是很大的话
可采用 @msg7086 的方法
ldehai
2013-06-21 00:39:38 +08:00
楼主想多了,这种一次性的任务不用这么担心效率吧,慢就慢点。有想的功夫都导完了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/72912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX