# Choosing the Right Storage Engine

A high-level overview of the main reasons for choosing a particular storage engine:

## Topic List

### General Purpose

* [InnoDB](https://mariadb.com/docs/server/server-usage/storage-engines/innodb) is a good general transaction storage engine, and the best choice in most cases. It is the default storage engine.
* [Aria](https://mariadb.com/docs/server/server-usage/storage-engines/aria), MariaDB's more modern improvement on [MyISAM](https://mariadb.com/docs/server/server-usage/storage-engines/myisam-storage-engine), has a small footprint and allows for easy copying between systems.
* [MyISAM](https://mariadb.com/docs/server/server-usage/storage-engines/myisam-storage-engine) has a small footprint and allows for easy copying between systems. MyISAM is MySQL's oldest storage engine. There is usually little reason to use it except for legacy purposes. Aria is MariaDB's more modern improvement.
* [XtraDB](https://mariadb.com/docs/server/server-usage/storage-engines/innodb) is no longer available. It was a performance-enhanced fork of InnoDB and was MariaDB's default engine until [MariaDB 10.1](https://app.gitbook.com/s/aEnK0ZXmUbJzqQrTjFyb/community-server/old-releases/10.1/changes-improvements-in-mariadb-10-1).

### Scaling, Partitioning

When you want to split your database load on several servers or optimize for scaling. We also suggest looking at [Galera](https://app.gitbook.com/s/3VYeeVGUV4AMqrA3zwy7/readme/mariadb-galera-cluster-usage-guide), a synchronous multi-master cluster.

* [Spider](https://mariadb.com/docs/server/server-usage/storage-engines/spider) uses partitioning to provide data sharding through multiple servers.
* [ColumnStore](https://app.gitbook.com/s/aEnK0ZXmUbJzqQrTjFyb/columnstore) utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
* The [MERGE](https://mariadb.com/docs/server/server-usage/storage-engines/merge) storage engine is a collection of identical [MyISAM](https://mariadb.com/docs/server/server-usage/storage-engines/myisam-storage-engine) tables that can be used as one. "Identical" means that all tables have identical column and index information.

### Compression / Archive

* [MyRocks](https://mariadb.com/docs/server/server-usage/storage-engines/myrocks) enables greater compression than InnoDB, as well as less write amplification giving better endurance of flash storage and improving overall throughput.
* The [Archive](https://mariadb.com/docs/server/server-usage/storage-engines/archive) storage engine is, unsurprisingly, best used for archiving.

### Connecting to Other Data Sources

When you want to use data not stored in a MariaDB database.

* The [CSV](https://mariadb.com/docs/server/server-usage/storage-engines/csv) storage engine can read and append to files stored in CSV (comma-separated-values) format. However, since MariaDB 10.0, CONNECT is a better choice and is more flexibly able to read and write such files.

### Search Optimized

Search engines optimized for search.

* [SphinxSE](https://mariadb.com/docs/server/server-usage/storage-engines/sphinx-storage-engine) is used as a proxy to run statements on a remote Sphinx database server (mainly useful for advanced fulltext searches).
* [Mroonga](https://mariadb.com/docs/server/server-usage/storage-engines/mroonga) provides fast CJK-ready full text searching using column store.

### Cache, Read-only

* [MEMORY](https://mariadb.com/docs/server/server-usage/storage-engines/memory-storage-engine) does not write data on-disk (all rows are lost on crash) and is best-used for read-only caches of data from other tables, or for temporary work areas. With the default [InnoDB](https://mariadb.com/docs/server/server-usage/storage-engines/innodb) and other storage engines having good caching, there is less need for this engine than in the past.

### Other Specialized Storage Engines

* [S3 Storage Engine](https://mariadb.com/docs/server/server-usage/storage-engines/s3-storage-engine) is a read-only storage engine that stores its data in Amazon S3.
* [Sequence](https://mariadb.com/docs/server/server-usage/storage-engines/sequence-storage-engine) allows the creation of ascending or descending sequences of numbers (positive integers) with a given starting value, ending value and increment, creating virtual, ephemeral tables automatically when you need them.
* The [BLACKHOLE](https://mariadb.com/docs/server/server-usage/storage-engines/blackhole) storage engine accepts data but does not store it and always returns an empty result. This can be useful in [replication](https://mariadb.com/docs/server/ha-and-performance/standard-replication/replication-overview) environments, for example, if you want to run complex filtering rules on a slave without incurring any overhead on a master.
* [OQGRAPH](https://mariadb.com/docs/server/server-usage/storage-engines/oqgraph-storage-engine) allows you to handle hierarchies (tree structures) and complex graphs (nodes having many connections in several directions).
* The [VIDEX](https://mariadb.com/docs/server/server-usage/storage-engines/videx-storage-engine) storage engine is an aggregated, extensible engine suitable for what-if analyses in MariaDB. The name is derived from \[VI]rtual in\[DEX]. Using VIDEX, you can evaluate how potential indexes (and optimizer decisions such as join orders) would change query plans *without creating real indexes on production data*.

## Alphabetical List

* The [Archive](https://mariadb.com/docs/server/server-usage/storage-engines/archive) storage engine is, unsurprisingly, best used for archiving.
* [Aria](https://mariadb.com/docs/server/server-usage/storage-engines/aria), MariaDB's more modern improvement on MyISAM, has a small footprint and allows for easy copy between systems.
* The [BLACKHOLE](https://mariadb.com/docs/server/server-usage/storage-engines/blackhole) storage engine accepts data but does not store it and always returns an empty result. This can be useful in [replication](https://mariadb.com/docs/server/ha-and-performance/standard-replication/replication-overview) environments, for example, if you want to run complex filtering rules on a slave without incurring any overhead on a master.
* [ColumnStore](https://app.gitbook.com/s/aEnK0ZXmUbJzqQrTjFyb/columnstore) utilizes a massively parallel distributed data architecture and is designed for big data scaling to process petabytes of data.
* [CONNECT](https://mariadb.com/docs/server/server-usage/storage-engines/connect) allows access to different kinds of text files and remote resources as if they were regular MariaDB tables.
* The [CSV](https://mariadb.com/docs/server/server-usage/storage-engines/csv/csv-overview) storage engine can read and append to files stored in CSV (comma-separated-values) format. However, since MariaDB 10.0, CONNECT is a better choice and is more flexibly able to read and write such files.
* [InnoDB](https://mariadb.com/docs/server/server-usage/storage-engines/innodb) is a good general transaction storage engine, and the best choice in most cases. It is the default storage engine.
* The [MERGE](https://mariadb.com/docs/server/server-usage/storage-engines/merge) storage engine is a collection of identical MyISAM tables that can be used as one. "Identical" means that all tables have identical column and index information.
* [MEMORY](https://mariadb.com/docs/server/server-usage/storage-engines/memory-storage-engine) does not write data on-disk (all rows are lost on crash) and is best-used for read-only caches of data from other tables, or for temporary work areas. With the default [InnoDB](https://mariadb.com/docs/server/server-usage/storage-engines/innodb) and other storage engines having good caching, there is less need for this engine than in the past.
* [Mroonga](https://mariadb.com/docs/server/server-usage/storage-engines/mroonga) provides fast CJK-ready full text searching using column store.
* [MyISAM](https://mariadb.com/docs/server/server-usage/storage-engines/myisam-storage-engine) has a small footprint and allows for easy copying between systems. MyISAM is MySQL's oldest storage engine. There is usually little reason to use it except for legacy purposes. Aria is MariaDB's more modern improvement.
* [MyRocks](https://mariadb.com/docs/server/server-usage/storage-engines/myrocks) enables greater compression than InnoDB, as well as less write amplification giving better endurance of flash storage and improving overall throughput.
* [OQGRAPH](https://mariadb.com/docs/server/server-usage/storage-engines/oqgraph-storage-engine) allows you to handle hierarchies (tree structures) and complex graphs (nodes having many connections in several directions).
* [S3 Storage Engine](https://mariadb.com/docs/server/server-usage/storage-engines/s3-storage-engine) is a read-only storage engine that stores its data in Amazon S3.
* [Sequence](https://mariadb.com/docs/server/server-usage/storage-engines/sequence-storage-engine) allows the creation of ascending or descending sequences of numbers (positive integers) with a given starting value, ending value and increment, creating virtual, ephemeral tables automatically when you need them.
* [SphinxSE](https://mariadb.com/docs/server/server-usage/storage-engines/sphinx-storage-engine) is used as a proxy to run statements on a remote Sphinx database server (mainly useful for advanced fulltext searches).
* [Spider](https://mariadb.com/docs/server/server-usage/storage-engines/spider) uses partitioning to provide data sharding through multiple servers.
* The [VIDEX](https://mariadb.com/docs/server/server-usage/storage-engines/videx-storage-engine) storage engine is an aggregated, extensible engine suitable for what-if analyses in MariaDB.

<sub>*This page is licensed: CC BY-SA / Gnu FDL*</sub>

{% @marketo/form formId="4316" %}
