早上在笔记本上测试了一下, 以生成Insert语句的方式, 从Oracle到MySQL迁移数据的速度. 对于MySQL来讲, 是不是绑定变量并不重要, 在MySQL的客户端编程中, 并没有绑定变量的概念, 这是因为MySQL并没有Oracle中类似的共享池, 而是由每个连接进程自行去解释SQL并执行.
写了一个Windows上的批处理脚本, 用SQLULDR2从Oracle中查询数据, 并生成MySQL的Insert脚本, 用管道输入到MySQL中去执行.
@echo off
echo %TIME%
sqluldr2 … table=emp_his format=mysql quote=0×27 escape=0×53 null=null file=- | mysql test
echo %TIME%
首先在MyISAM下测试, 先将表改成MyISAM方式存贮.
mysql> alter table emp_his engine= myisam;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
进行数据装载测试, 可以看出还是很快的.
D:\mysql-5.0.84-win32\bin>runload.bat
7:12:28.10
7:12:41.87
查一下总共迁移的记录数.
mysql> select count(*) from emp_his;
+———-+
| count(*) |
+———-+
| 951308 |
+———-+
1 row in set (0.00 sec)
接下来在Innodb下测试, 将表改成Innodb方式存贮.
mysql> alter table emp_his engine= innodb;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
进行数据装载测试, 可以看出比MyISAM要慢不少.
D:\mysql-5.0.84-win32\bin>runload.bat
7:09:34.85
7:10:06.15
查一下总共迁移的记录数.
mysql> select count(*) from emp_his;
+———-+
| count(*) |
+———-+
| 951308 |
+———-+
1 row in set (2.11 sec)
在MySQL中, 将同样的表从MyISAM转到Innodb, 需要多少时间?
mysql> alter table emp_his engine= innodb;
Query OK, 951308 rows affected (16.67 sec)
Records: 951308 Duplicates: 0 Warnings: 0
对于在笔记本上测试的这个结果, 个人是相当满意的, 测试的表有8个字段, 差不多等于平均数.