mssql大数据高效率导入mysql
之前在网络上 看到 qqqun数据库 就将其下载下来玩玩大数据(纯属研究)
下载下来发现是mssql 的,个人不怎么喜欢mssql 数据库
同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源
mysql 运行不需要启动那么多的服务 体积更小 mssql 体积很大
mysql 可以跨平台 可以绿色启动 无需安装
于是乎就将该数据库转换成mysql (相信很多人转过)
之前尝试用Navicat 转换 发现速度巨慢
下面分享下我的思路
1、将所有数据库和表合并成一库一表(这样方便更好的处理数据)
@echo off
::echo 该操作会覆盖原有数据 且会执行很长时间 按任意键将继续执行
::pause>nul
::echo delete from qqinfo..qqinfo>1.sql
del /q 1.sql
setlocal Enabledelayedexpansion
set p=0
for /l %%i in (1,1,11) do (
for /l %%j in (1,1,100) do (
set /a p=!p!+1
echo INSERT INTO qqinfo.dbo.qqinfo^([QQNum],[Nick],[QunNum]^) SELECT [QQNum],[Nick] ,[QunNum] FROM GroupData%%i.dbo.Group!p!>>1.sql
echo go>>1.sql
)
)
osql -E -i 1.sql
echo 执行完毕!
bcp "SELECT [QQNum],[Nick] ,[QunNum] FROM qqinfo.dbo.qqinfo" queryout qun.txt -c -S127.0.0.1 -Usa -Psasa
4、将数据导入到mysql数据库(自动创建库 表 和索引 如果只是一个库一表 创建索引会卡很久很久 很久)
@echo off
::延时脚本
IF EXIST time.vbs @del /q /s time.vbs
@echo wscript.sleep 1000>time.vbs
::创建数据库和表脚本
IF EXIST tables.sql @del /q /s tables.sql
for /l %%i in (1,1,15) do (
echo create table if not exists qqinfo_%%i ^(^`ID^` int^(11^) NOT NULL AUTO_INCREMENT,^`QQNum^` int^(11^) NOT NULL,^`Nick^` char^(20^) ,^`QunNum^` int^(11^) ,PRIMARY
KEY ^(^`ID^`^),KEY ^`inx_qqinfo^` ^(^`QQNum^`,^`QunNum^`^) ^) ENGINE=MyISAM DEFAULT CHARSET=utf8^;>>tables.sql
)
::创建导入数据脚本
setlocal EnableDelayedExpansion
set num=0
set p=H:/mysql/data/tmp/
IF EXIST load.sql @del /q /s load.sql
for /r %%i in (qun_a*.txt) do (
set /a num=!num!+1
echo load data infile ^'!p!%%~nxi^' into table qqinfo_2.qqinfo_!num! fields terminated by ^':^' ^(ID,QQNum,Nick,QunNum^)^;>>load.sql
)
::创建数据库
mysql -u root -p123456 -e "create database if not exists `qqinfo_2` DEFAULT CHARACTER SET gbk;"
echo 正在创建表...
@cscript.exe //nologo time.vbs
mysql -u root -p123456 qqinfo_2 < tables.sql
@cscript.exe //nologo time.vbs
echo 创建完成...
mysql -u root -p123456 -e "show tables;" qqinfo_2
@cscript.exe //nologo time.vbs
cls
echo 导入数据 ...
echo 可能需要很久 请耐心等待...
@cscript.exe //nologo time.vbs
mysql -u root -p123456 qqinfo_2 < load.sql
cls
echo 导入成功!
@del /q /s time.vbs
@del /q /s tables.sql
@del /q /s load.sql
pause>nul
编码 (库、表)统一为gbk 因为bcp导出的数据 为gbk
所用到工具均为数据库自带 注意路径
3个小时处理完所有 比传统方法快 不是一点两点....
分表插入数据并创建索引(分表是重点 如果插入到一库一表 会非常非常慢 估计一个星期吧 甚至更长!!!)
本人非专业人士 了解的知识很粗浅 如果您有更好的见解 欢迎指点 重在交流
评论48次
我前段时间折腾了好久才把wamp跟sql2012链接起来,太费劲了。
mack ....试试看!
收藏下 下来尝试下
好东西收藏了试试
哦?
收藏起来,谢谢分享
感觉我在哪看到过这篇文章...
mark一下!
流B~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
mysql 一库一表 做索引 导入数据 非常非常的慢 所以 弄成一库多表
谢谢楼主分享经验
收藏!mark
本来我也打算自己在本机弄一个,但是mssql着实不喜欢啊!
@寂寞的心 @lostwolf 有道理 一库一表做索引后 速度怎么样? 有没有什么办法优化? 试试这个速度怎么样https://s3.amazonaws.com/qqqun./index.html
合成一库一表?那执行select肯定很慢吧? 原先mssql的分库分表,是为了更好的查询。
收藏 以后用到
没做索引。 而且下载需要很久
mark 先,不过MYSQL的百度盘有下
感谢分享,多点楼主这样的人,让技术分享更多点
mark,回头导oracle试试。。。