选择的业务表:{ "tab_login_addr", "tab_map_race", "tab_item", }
选择的引擎:{ "myisam", "innodb", }
数据文件大小对比
结果:
从数据库的角度
TABLE_NAME | data_size | index_size | TABLE_ROWS
innodb_tab_item | 3678.00MB | 4861.00MB | 46726223
innodb_tab_login_addr | 877.00MB | 1253.72MB | 11043148
innodb_tab_map_race | 233.77MB | 123.73MB | 4492434
myisam_tab_item | 1893.22MB | 3399.12MB | 46726223
myisam_tab_login_addr | 608.83MB | 407.57MB | 11044195
myisam_tab_map_race | 141.37MB | 71.14MB | 4492058
从文件系统的角度
8.6G innodb_tab_item.ibd
3.4G myisam_tab_item.MYI
1.9G myisam_tab_item.MYD
372M innodb_tab_map_race.ibd
72M myisam_tab_map_race.MYI
142M myisam_tab_map_race.MYD
2.2G innodb_tab_login_addr.ibd
408M myisam_tab_login_addr.MYI
609M myisam_tab_login_addr.MYD
总结:
相同数据的情况下,MyISAM的文件大小要远远小于InnoDB的文件大小。一般 myisam比innodb 为(50~65)比100
数据装载速度
优化建议:
innodb:
禁用autocommit
如果有二级索引,先去掉二级索引,再装载数据,最后添加二级索引
如果有外键,先去掉外键,再装载数据,最后添加外键
如何可以的话,尽量提高io能力,innodb的内存大小,调整刷新策略
myisam:
尽可能提高io能力,key_buffer_size参数,磁盘的刷新策略
装载方式:(选择的方式:3)
1 长SQL insert into table(xx,xx) values(xx,xx),(xx,xx)
2 先使用SELECT...INTO OUTFILE导出,再使用 LOAD DATA INFILE导入
3 使用 insert into ...select...
结果:
140分钟 innodb_tab_item.ibd
52分钟 myisam_tab_item
5分钟 innodb_tab_map_race.ibd
2分钟 myisam_tab_map_race
23分钟 innodb_tab_login_addr
9分钟 myisam_tab_login_addr
结论:
MyISAM的插入速度要远远高于InnoDB。一般InnoDB消耗的时间是MyISAM的150%以上,而且随着数据量的增多差别越明显。
但是innodb有较大的优化和调整空间。所以在不同情况下,差别比较大。
有话要说