MySQL中都有哪些存储引擎?
存储引擎是MySQL数据库的一个重要特征,为了提高MySQL数据库的使用效率和灵活性,我们需要根据实际的需求来选择合适的存储引擎。查看MySQL数据库都支持哪些存储引擎,可以通过命令:show enginesG; 结果如下:
*************************** 1. row *************************** Engine: FEDERATED Support: NO Comment: Federated MySQL storage engine Transactions: NULL XA: NULL Savepoints: NULL *************************** 2. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tables Transactions: NO XA: NO Savepoints: NO *************************** 3. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engine Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears) Transactions: NO XA: NO Savepoints: NO *************************** 5. row *************************** Engine: CSV Support: YES Comment: CSV storage engine Transactions: NO XA: NO Savepoints: NO *************************** 6. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables Transactions: NO XA: NO Savepoints: NO *************************** 7. row *************************** Engine: ARCHIVE Support: YES Comment: Archive storage engine Transactions: NO XA: NO Savepoints: NO *************************** 8. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 9. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance Schema Transactions: NO XA: NO Savepoints: NO
通过上面的规范我们可以看到,MySQL数据库有9中存储引擎,其中 Engine 标识引擎的名称,Support 表示当前是否支持这种存储引擎,Comment 是对这种存储引擎的简单介绍,Transactions 表示是否支持事务,XA 表示存储引擎锁支持的分布式是否符合XA规范,Savepoints 表示是否支持事务处理中的保存点。通诺上面的结果我们恶意发现MySQL的默认存储引擎是 InnoDB,该种存储引擎支持事务,行级锁,和外键关联。
查看MySQL当前默认的存储引擎:
mysql> show variables like 'storage_engine%'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ 1 row in set (0.00 sec)
修改MySQL默认的存储引擎
有一种图形化界面的方式可以修改,但是在这里我不作介绍,我介绍的是通过修改MySQL的配置文件来修改默认的存储引擎:
找到<MySQL_HOME>/my.ini 文件,我的MySQL是安装在Windows7上面的,找到安装目录 C:ProgramDataMySQLMySQL Server 5.6,里面有一个配置文件 my.ini.打开。(mac 和Linux的应该也差不多,总之有个安装目录)
修改[mysqld] 组中 default-storage-engine 的配置项,(找不到直接搜索),修改为MySQL支持的存储引擎即可。 修改完成后保存,重启MySQL。
# The default storage engine that will be used when create new tables when default-storage-engine=MyISAM
再次查看默认存储引擎
mysql> show variables like 'storage_engine%'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | MyISAM | +----------------+--------+ 1 row in set (0.00 sec)
常用存储引擎的主要特性和如何选择?
特性 | MyISAM | MEMORY | InnoDB |
存储限制 | yes | 64TB | yes |
事务安全 | no | yes | no |
锁机制 | 表锁 | 行锁 | 表锁 |
B树索引 | yes | yes | yes |
哈希索引 | no | no | yes |
全文索引 | yes | no | no |
集群索引 | no | yes | no |
数据缓存 | N/A | yes | yes |
索引缓存 | yes | yes | yes |
数据可压缩 | yes | no | no |
空间使用 | 低 | 高 | N/A |
内存使用 | 低 | 高 | 中 |
批量插入的速度 | 高 | 低 | 高 |
支持外键 | no | yes | no |
常见的三种存储引擎应用场合:
MyISAM: 不支持事务,也不支持外键,所以访问速度比较快,因此对事务完整性没有要求并以访问为主的应用场合比较使用。
MEMORY:使用内存来存储数据,虽然访问速度比较快,但是安全性没有保障,如果应用中涉及数据比较小,而且需要快速访问的时候,可以使用。
InnoDB:在事务上具有优势,具有事务提交、回滚、崩溃回复能力的事务封装,因此比MyISAM占用更多的存储空间。因此需要进行频繁的更新、删除操作时,同时还对事务的完整性比较高,需要实现并发控制,适合使用该存储引擎。