I've been reading about this for about the last hour and a half but I still feel unsure, so I thought I'd ask the experts.
I've begun work on a new project over the weekend. The database is currently sitting at about 2.66 million records spread across 16 tables, with plans to increase in size substantially. The tables are not related to each other and thus do not require foreign key constraints. I've been using InnoDB as that's the default engine with my (rather old) MySQL installation.
I started considering my engine when my PHP script to calculate the total rows in the database started to choke and thus time out, even when I increased the time out value to 60 seconds. I looked into other ways of getting the total rows and found SHOW TABLE STATUS, which would simply pull the tables' meta data, but InnoDB doesn't store exact table row counts and instead only approximates (which is grossly inaccurate).
My database will be extremely write-intensive but 99.99% of all the writing will be done by me via PHP scripts. I have scripts that generate values (via loops) that get inserted into the database. There is the ability on the front-end to do an insert, but it is on an individual basis and done manually. The majority of front-end interaction of the database will be reading. There are no delete or update queries; any updating or deleting will be done by me via phpMyAdmin and I don't really see myself needing to. The select queries are very simple (SELECT blah FROM blah WHERE WhatImLookingFor = WhatIsHopefullyThere) and do not require any table joining. My PHP script determines, based on what is being searched, which table perform the query on, so I'm only searching through a fraction of the data at a time. That's all the database interaction for my project.
My concern is with the table-locking of MyISAM. I understand that the entire table is locked when in use. What I am wondering is if this will really be a problem if inserts are "coming from one place" (AKA, me) instead of multiple sources such as other users. Will I notice a significant performance hit on my scripts if I move to MyISAM? Is it able to lock, insert the row, unlock, then lock, insert the row, unlock, etc. incredibly quickly? Suffering a performance hit on inserts isn't the end of the world, but I'd like to avoid it if possible since some of my scripts can run for hours. What I am more concerned with is maintaining reading performance, which seems to be the benefit of MyISAM. With 2.6+ million rows and counting, I need to maintain incredibly fast searching.
If you have made it this far, thank you for taking the time to read.
Any advice would be greatly appreciated. Thank you!