MyISAM is a storage engine for MySQL, one of the most widely used open-source relational database management systems. MyISAM stores data in a format optimized for fast read operations and simple design. It was the default storage engine in MySQL until version 5.5, when it was replaced by InnoDB.
MyISAM is based on the older ISAM (Indexed Sequential Access Method) format, which was developed for early database systems. It added features such as support for larger files, indexing improvements, and better recovery options.
While MyISAM is no longer the default in MySQL, it is still in use today in some systems that require its speed and simplicity for read-heavy workloads.
MyISAM was introduced with MySQL 3.23 in the late 1990s. It was developed to improve upon the older ISAM engine, which had notable limitations:
MyISAM retained the basic ISAM structure but introduced key improvements:
The name MyISAM combines "My", a reference to co-founder Michael Widenius’s daughter, and "ISAM", the underlying method it replaced. MyISAM quickly became popular because of its speed and low system requirements.
At the time, disk I/O was a major bottleneck, and MyISAM’s simple, file-based design made it ideal for:
From MySQL 3.23 through 5.1, MyISAM remained the default engine. In version 5.5, released in 2010, InnoDB became the default. This change reflected growing needs for transactional support, crash recovery, and concurrency.
Still, MyISAM remained available for use and was often chosen for specialized tasks.
MyISAM stores each table on disk using three files:
This structure separates data and indexes into different files. This design makes certain tasks faster, such as repairing a table or rebuilding an index.
MyISAM does not use page caching or write-ahead logs. It relies on the operating system's file caching. This keeps the storage engine simple but places more pressure on the OS and disk subsystem.
When a user inserts or updates data, MyISAM writes the change directly to the .MYD file. Indexes are updated in the .MYI file. There is no journaling system, so incomplete writes due to crashes can leave the data in an inconsistent state.
MyISAM supports both primary and secondary indexes. It uses B-tree indexes and allows up to 64 indexes per table. Each index can have up to 16 columns.
Indexes can be created on fixed-length or variable-length columns. MyISAM also supports full-text indexing on CHAR, VARCHAR, and TEXT columns. This feature made it attractive for early search applications where text queries needed to be fast and flexible.
Unlike InnoDB, MyISAM does not support foreign keys. There is no built-in method for enforcing relationships between tables.
MyISAM indexes point to the row’s location in the .MYD file. This makes index access very fast, especially for reads, but it can cause issues if the data file becomes corrupted.
MyISAM uses table-level locking. This means that when one session writes to a table, no other session can write or read from it until the write finishes.
This model works well for read-heavy workloads. Many sessions can read from the same table at the same time. But it slows down performance when many sessions try to write.
In high-write systems, MyISAM can become a bottleneck. This is one of the reasons it was replaced by InnoDB, which uses row-level locking.
MyISAM does not support transactions. There is no BEGIN, COMMIT, or ROLLBACK. Once a change is made, it is permanent. If the server crashes in the middle of a write, the table may need to be repaired.
MyISAM includes tools for detecting and fixing table corruption. The myisamchk utility can scan and repair .MYI and .MYD files. The REPAIR TABLE SQL command offers a way to fix tables from within MySQL.
MyISAM tables are prone to corruption if a server shuts down unexpectedly. This is because the engine does not write changes atomically and does not use journaling.
To reduce the risk of corruption, users often configure MyISAM to flush writes more frequently or use unbuffered writes. But these changes slow down performance.
Though no longer the default engine in MySQL, MyISAM still offers benefits in the right context.
MyISAM and InnoDB serve different use cases. Their differences explain the shift from one to the other over time.
Feature | MyISAM | InnoDB |
TransactionsNo | No | Yes |
Foreign Keys | No | Yes |
Locking | Table-level | Row-level |
Crash Recovery | Manual repair | Automatic |
Read Performance | Fast | Moderate |
Write Performance | Slower | Faster |
Full-Text Search | Yes | Yes (since 5.6) |
File Structure | Plain files | Tablespace |
Index Type | B-tree | B-tree |
InnoDB supports ACID compliance. It handles transactions, consistency, isolation, and durability. This makes it more reliable in multi-user systems.
MyISAM lacks these features, but in cases where data is mostly read and not often written, its speed remains helpful.
MyISAM fits in projects that need fast read access and do not require transactional guarantees. Common examples include:
Developers sometimes use MyISAM for logging when performance is more important than safety. But this comes with the risk of data loss after crashes.
After InnoDB became the default in MySQL 5.5, MyISAM began to decline. The new default had better concurrency, safer writes, and improved performance for modern systems.
Yet, MyISAM is still included in MySQL. Some projects keep using it for speed or compatibility. Others use it because they rely on older versions of MySQL.
Some cloud services or shared hosts still run MyISAM-based applications. In many of these cases, MyISAM is used out of habit rather than necessity.
MyISAM is still part of official MySQL distributions. MariaDB, a fork of MySQL, also includes MyISAM support. However, newer tools and engines do not prioritize it.
Most improvements now focus on InnoDB and alternative engines like Aria (from MariaDB) or TokuDB (designed for compression and write-intensive tasks).
There are no active efforts to modernize MyISAM. It remains stable but is not under active development for new features.
NTC Hosting supports MyISAM across its range of hosting services, including web hosting, VPS, semi-dedicated servers, and dedicated servers (when purchased with the free Hepsia Control Panel). This support allows users to leverage MyISAM's strengths in scenarios where fast read access and efficient data retrieval are crucial.
By utilizing MyISAM, developers can optimize their databases for performance in read-intensive tasks, ensuring quick access to data and efficient handling of queries.
While MyISAM may not be ideal for all use cases, especially those requiring transactions or extensive write operations, NTC Hosting's inclusion of MyISAM support provides flexibility for users to choose the right database engine for their specific needs.