I need to insert rows as fast as possible into a database with freshly created tables and no indexes. I'm looking at on the order of 20M rows, which is not that much. Would InnoDB or MyISAM tables give me the best performance?

Obviously, there are other batch loading tricks that I'm looking at as well.

and you will get a nice performance boost on your queries against that table.

The example given in the book stated that queries against DYNAMIC-row MyISAM table took 50% longer to execute that the FIXED-row MyISAM table. If you then take the FIXED-row MyISAM table and compress it using myisampack, the compressed FIXED-row MyISAM table queries 10% faster than the uncompressed FIXED-row MyISAM table.

There is a grave drawback to this approach ??? The FIXED-row MyISAM table are at least twice as large as its DYNAMIC-row MyISAM counterparts. So, it you could afford to tradeoff speed for space, you should go for FIXED-row MyISAM tables. Then, all queries will be faster without any additional table structure changes.

You could also run the ALTER TABLE tblname ROW_FORMAT=FIXED; against an InnoDB table as well. If you did this to tables in both InnoDB and MyISAM storage engines, you still would not have a level playing field. The edge would always go to MyISAM. The reason ??? All non-unique index lookups must traverse a nonclustered index and then through the clustered index for rowid access. MyISAM indexes only go through one index at most.

I am not just conjecturing on this. About 4 years ago, I personally took a 2GB table, ran the ALTER TABLE, and expanded it to 3.7GB. All resulting queries averaged 20% faster than it was running prior to making the row format change.

I highly recommend doing this for all MyISAM and InnoDBs if you want increased performance and if you do not mind increased file sizes.