MySQL vs MariaDB: Performance & Feature Differences
Title: MariaDB versus MySQL - Features
See also MariaDB vs MySQL - Compatibility
Differences Per Releases
- For differences between MySQL 5.7 and MariaDB 10.3 specifically, see Incompatibilities and Feature Differences Between MariaDB 10.3 and MySQL 5.7
- For differences between MySQL 5.7 and MariaDB 10.2 specifically, see Incompatibilities and Feature Differences Between MariaDB 10.2 and MySQL 5.7
- For a detailed breakdown of system variable differences, see:
- System variable differences between MariaDB 10.4 and MySQL 8.0
- System variable differences between MariaDB 10.3 and MySQL 8.0
- System variable differences between MariaDB 10.3 and MySQL 5.7
- System variable differences between MariaDB 10.2 and MySQL 5.7
- System variable differences between MariaDB 10.1 and MySQL 5.7
- System variable differences between MariaDB 10.1 and MySQL 5.6
- System variable differences between MariaDB 10.0 and MySQL 5.6
- System variable differences between MariaDB 5.5 and MySQL 5.5
- For a detailed breakdown of function differences, see:
More Storage Engines
- ColumnStore, a column oriented storage engine optimized for Data warehousing.
- MyRocks, a storage engine with great compression, in 10.2
- Aria, MyISAM replacement with better caching.
- FederatedX (drop-in replacement for Federated)
- OQGRAPH (In MariaDB 5.2 and later. Disabled in MariaDB 5.5 only.) — new in 5.2
- SphinxSE — new in 5.2
- TokuDB in MariaDB 5.5 and later.
- CONNECT in MariaDB 10.0 and later.
- SEQUENCE in MariaDB 10.0 and later.
- Spider in MariaDB 10.0 and later.
- Cassandra in MariaDB 10.0
- MariaDB now provides much faster privilege checks for setups with many user accounts or many database
- The new FLUSH SSL command allows SSL certificates to be reloaded without restarting the server
- Many optimizer enhancements in MariaDB 5.3. Subqueries are now finally usable. The complete list and a comparison with MySQL is here. A benchmark can be found here.
- Faster and safer replication: Group commit for the binary log. This makes many setups that use replication and lots of updates more than 2x times faster.
- Parallel replication — new in 10.0
- Improvements for InnoDB asynchronous IO subsystem on Windows.
- Indexes for the MEMORY(HEAP) engine are faster. According to a simple test, 24% faster on INSERT for integer index and 60% faster for index on a CHAR(20) column. Fixed in MariaDB 5.5 and MySQL 5.7.
- Segmented Key Cache for MyISAM. Can speed up MyISAM tables with up to 4x — new in 5.2
- Adjustable hash size for MyISAM and Aria. This can greatly improve shutdown time (from hours to minutes) if using a lot of MyISAM/Aria tables with delayed keys — new in 10.0.13
- CHECKSUM TABLE is faster.
- We improved the performance of character set conversions (and removed conversions when they were not really needed). Overall speed improvement is 1-5 % (according to sql-bench) but can be higher for big result sets with all characters between 0x00-0x7f.
- Pool of Threads in MariaDB 5.1 and even better in MariaDB 5.5. This allows MariaDB to run with 200,000+ connections and with a notable speed improvement when using many connections.
- Several speed improvements when a client connects to MariaDB. Many of the improvements were done in MariaDB 10.1 and MariaDB 10.2.
- There are some improvements to the DBUG code to make its execution faster when debug is compiled in but not used.
- Our use of the Aria storage engine enables faster complex queries (queries which normally use disk-based temporary tables). The Aria storage engine is used for internal temporary tables, which should give a speedup when doing complex selects. Aria is usually faster for temporary tables when compared to MyISAM because Aria caches row data in memory and normally doesn't have to write the temporary rows to disk.
- The test suite has been extended and now runs much faster than before, even though it tests more things.
Extensions & New Features
We've added a lot of new features to MariaDB. If a patch or feature is useful, safe, and stable — we make every effort to include it in MariaDB. The most notable features are:
- Support introduced for System-versioned tables. Allows queries to access both current and historic data, aiding in managing retention, analysis and point-in-time recovery. — new in 10.3
- ALTER TABLE... DROP COLUMN can now run as Instant operations. Can also now change the ordering of columns. — new in 10.4
- Support introduced for password expiration, using the user password expiry — new in 10.4
- In order to support the use of multiple authentication plugins for a single user, the
mysql.usersystem table has been retired in favor of the
mysql.glob_privsystem table. — new in 10.4
- The unix_socket authentication plugin is now the default on Unix-like systems. This represents a major change to authentication in MariaDB — new in 10.4
- Support introduced for Optimizer Trace, which provides detailed information on how the Optimizer processes queries. To enable Optimizer Trace, set the
optimizer_tracesystem variable — new in 10.4
- The MariaDB SQL/PL stored procedure dialect (enabled with sql_mode=ORACLE) now supports Oracle style packages. Support for the following statements are available: CREATE PACKAGE, CREATE PACKAGE BODY, DROP PACKAGE, DROP PACKAGE BODY, SHOW CREATE PACKAGE, SHOW CREATE PACKAGE BODY — new in 10.3
- Automatic collection of Engine Independent Table Statistics — new in 10.4
- Support for the use of parentheses (brackets) for specifying precedence in the ordering of execution for
SELECTstatements and Table Value Operations, (including the use of UNION, EXCEPT, INTERSECT operations) — new in 10.4
- Support for anchored data types added to local stored procedure variables. — new in 10.3
- Support added for Stored Aggregate functions — new in 10.3
- Oracle compatible SUBSTR() function is available — new in 10.3
- Oracle compatible SEQUENCE support is provided — new in 10.3
- Support for anchored data types added to stored routine variables — new in 10.3
- Support for anchored data types added to stored routine parameters — new in 10.3
- Cursors with parameters are now supported — new in 10.3
- INVISIBLE columns are now supported — new in 10.3
- Instant ADD COLUMN is now available for InnoDB — new in 10.3
- Window functions are supported — new in 10.2
- Number of supported decimals in DECIMAL has increased from
38— new in 10.2
- Recursive Common Table Expressions — new in 10.2
- New WITH statement.
WITHis a common table expression that allows one to refer to a subquery expression many times in a query — new in 10.2
- CHECK CONSTRAINT — new in 10.2
- DEFAULT expression, including
TEXT— new in 10.2
- Added catchall for list partitions — new in 10.2
- Oracle-style EXECUTE IMMEDIATE statement — new in 10.2
- Several new JSON functions — new in 10.2
- Microsecond Precision in Processlist
- Table Elimination
- Virtual Columns — new in 5.2
- Microseconds in MariaDB — new in 5.3
- Extended User Statistics — new in 5.2
- KILL all queries for a user — new in 5.3,
- KILL QUERY ID - terminates the query by query_id, leaving the connection intact — new in 10.0.5,
- Pluggable Authentication — new in 5.2
- Storage-engine-specific CREATE TABLE — new in 5.2
- Enhancements to INFORMATION SCHEMA.PLUGINS table — new in 5.2
- Group commit for the binary log. This makes replication notably faster! — new in 5.3
mysqlbinlog option to change the used database — new in 5.2
- Progress reporting for
LOAD DATA INFILE— new in 5.3
- Faster joins and subqueries — new in 5.3
- HandlerSocket and faster HANDLER calls — new in 5.3
- Dynamic Columns support — new in 5.3
- GIS Functionality — new in 5.3
- Multi-source replication — new in 10.0
- Global Transaction ID — new in 10.0
- SHOW EXPLAIN gives the EXPLAIN plan for a query running in another thread. — new in 10.0
- Roles — new in 10.0
- PCRE Regular Expressions (including
REGEXP_REPLACE()) — new in 10.0
- DELETE ... RETURNING — new in 10.0
- MariaDB supports more collations than MySQL.
For a full list, please see features for each release
- More tests in the test suite.
- Bugs in tests fixed.
- Test builds with different configure options to get better feature testing.
- Remove invalid tests. (e.g. don't test feature ''X'' if that feature is not in the tested build)
Fewer Warnings and Fewer Bugs
- Bugs are bad. Fix as many bugs as possible and try to not introduce new ones.
- Compiler warnings are also bad. Eliminate as many compiler warnings as possible.
Truly Open Source
- All code in MariaDB is released under GPL, LGPL or BSD.
- MariaDB does not have closed source modules like the ones that can be found in MySQL Enterprise Edition. In fact, all the closed source features in MySQL 5.5 Enterprise Edition are found in the MariaDB open source version.
- MariaDB client libraries (for C, for Java (JDBC), for Windows (ODBC)) are released under LGPL to allow linking with closed source software. MySQL client libraries are released under GPL that does not allow linking with closed source software.
- MariaDB includes test cases for all fixed bugs. Oracle doesn't provide test cases for new bugs fixed in MySQL 5.5.
- All bugs and development plans are public.
- MariaDB is developed by the community in true open source spirit.