我需要尽可能快地将行插入到新创build的表和没有索引的数据库中。 我正在看20M行,这不是很多。 InnoDB或MyISAM表会给我最好的performance吗?
显然,还有其他的批量加载技巧,我也在看。
InnoDB是事务性的,所以不用担心primefaces写入的MyISAM会更快。
对于您描述的情况,MyISAM将比InnoDB更快。 如果您只是想尽可能快地将数据导入MySQL,请查看LOAD DATA INFILE 。
这里还没有人提到过。
如果将MyISAM表格的行格式从DYNAMIC(默认)转换为FIXED,则可以将整体SQL性能提高至less20%。
根据MySQL Database Design and Tuning(ISBN 0-672-32756-1)的第71-73页 ,只需在任何MyISAM表上运行以下命令:
ALTER TABLE tblname ROW_FORMAT=FIXED;
你将会在你的查询中获得不错的性能提升。
书中给出的例子表明,对DYNAMIC行的MyISAM表的查询花费了50%的时间来执行FIXED行的MyISAM表。 如果使用myisampack将FIXED行的MyISAM表压缩,则压缩的FIXED行的MyISAM表的查询速度将比未压缩的FIXED行的MyISAM表快10%。
这种方法有一个严重的缺点? FIXED行MyISAM表至less是其dynamic行MyISAM对应表的两倍。 所以,你可以负担得起的空间折中速度,你应该去固定行MyISAM表。 然后,所有查询都会更快,而且不会有任何额外的表结构更改。
你也可以运行ALTER TABLE tblname ROW_FORMAT = FIXED; 对InnoDB表也是如此。 如果你在InnoDB和MyISAM存储引擎中对表进行了这样的操作,你仍然没有公平的竞争环境。 边缘总是会去MyISAM。 原因 ??? 所有非唯一索引查找必须遍历非聚簇索引,然后遍历rowid访问的聚簇索引。 MyISAM索引最多只能通过一个索引。
我不只是在这个猜测。 大概4年前,我个人拿了一张2GB的桌子,跑了ALTER TABLE,把它扩大到了3.7GB。 所有结果查询的平均速度比在更改行格式之前运行的速度快20%。
如果你想提高性能,如果你不介意增加文件大小,我强烈build议为所有MyISAM和InnoDBs做这个。