Most of my time is spent working with my clients on the Comprehensive Database Performance Health Check. The best part of the health check engagement is that I get to meet many new people and share lots of different stories. Recently I was asked by one of the DBAs who also work on MySQL along with SQL Server, what is my preferred engine for MySQL – MyISAM or InnoDB?
I think it is a very interesting question to ask in the year 2019 as I believe MySQL team itself has already made the decision of this one since MySQL version 5.5. They have already selected InnoDB as their default engine since MySQL 5.5.
Here are my primary five reasons for the going with InnoDB
- InnoDB supports row-level locking which is critical for the performance. MyISAM supports only table-level locking creating a huge bottleneck when your table is updated frequently.
- InnoDB implements transactions, which are critical on mission-critical database application which is involved in banking as well as e-commerce.
- InnoDB supports relationship constraint like foreign keys which makes it more relational database friendly over MyISAM which supports none.
- InnoDB supports ACID (Atomicity, Consistency, Isolation, Durability) transactions, making it fully compliant to RDBMS rules which MyISAM does not support it.
- InnoDB manages indexes and base table with the help of storage manager internally with memory buffer pool, which is extremely efficient in terms of performance. MyISAM uses disk files primarily for the base table, which is not optimized for performance.
My suggestion is that if you have to make the selection of the engine either you let your MySQL decide the default engine or select InnoDB which has latest features of RDBMS.
I am currently writing a whitepaper about this topic, once the whitepaper publishes I will share that with all of you so you can read it about it.
Reference: Pinal Dave (https://blog.sqlauthority.com)