选择合适的MySQL存储引擎
MySQL 5.5
MyISAM存储引擎、InnoDB存储引擎和MEMORY存储引擎的应用场合和相应建议
存储引擎 | 优缺点 | 使用建议 |
MyISAM存储引擎 | MyISAM存储引擎不支持事务、也不支持外键,访问速度较快 | 当对事务完整性没有要求并以访问为主的应用适合使用MyISAM存储引擎 |
InnoDB存储引擎 | InnoDB存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安全,要比MyISAM存储引擎占用更多的磁盘空间 | 数据需要频繁的更新、删除操作。同时还对事务的完整性要求较高,并实现并发控制,此时需要使用InnoDB存储引擎 |
MEMORY存储引擎 | MEMORY存储引擎使用内存来存储数据,因此MEMORY存储引擎的数据访问访问速度较快,但安全上没有保证 | 如果应用中涉及数据比较小,需要进行快速访问,则适合使用该存储引擎 |
存储引擎特性
特性 | MyISAM | InnoDB | MEMORY |
存储限制 | 有 | 64TB | 有 |
事务安全 | 不支持 | 支持 | 不支持 |
锁机制 | 表锁 | 行锁 | 表锁 |
B树索引 | 支持 | 支持 | 支持 |
哈希索引 | 不支持 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 | 不支持 |
集群索引 | 不支持 | 支持 | 不支持 |
数据缓存 | 支持 | 支持 | |
索引缓存 | 支持 | 支持 | 支持 |
数据可压缩 | 支持 | 不支持 | 不支持 |
空间使用 | 低 | 高 | N/A |
内存使用 | 低 | 高 | 中等 |
批量插入的速度 | 高 | 低 | 高 |
支持外键 | 不支持 | 支持 | 不支持 |
查询默认存储引擎
show variables like 'storage_engine%';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.00 sec)
执行结果显示,InnoDB存储引擎为默认存储引擎
查看当前数据库支持的存储引擎
show engines;
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
7 rows in set (0.00 sec)
其中Engine参数表示存储引擎名称;
Support参数表示MySQL数据库管理系统是否支持该存储引擎,YES表示支持,NO表示不支持
XA参数表示存储引擎所支持的分布式是否符合XA规范,YES表示支持,NO表示不支持
Savepoints参数表示存储引擎是否支持事务处理中的保存点,YES表示支持,NO表示不支持
show variables like 'have%';
+----------------------+----------+
| Variable_name | Value |
+----------------------+----------+
| have_compress | YES |
| have_crypt | YES |
| have_csv | YES |
| have_dynamic_loading | YES |
| have_geometry | YES |
| have_innodb | YES |
| have_ndbcluster | NO |
| have_openssl | DISABLED |
| have_partitioning | YES |
| have_profiling | YES |
| have_query_cache | YES |
| have_rtree_keys | YES |
| have_ssl | DISABLED |
| have_symlink | YES |
+----------------------+----------+
14 rows in set (0.00 sec)
Variable_name 参数表示存储引擎的名字
Value的值YES表示支持,NO表示不支持