最近看MySQL的时候,总结了一下存储引擎的一些特点,此特记录一下,部分参考其他博文
存储引擎 简介
存储引擎通俗的说就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
Oracle和SQL Server等数据库只有一种存储引擎,所有数据存储管理机制都是一样的;而MySql数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。
MySQL常用引擎
MySQL 中目前广泛使用的是 MyISAM 和 InnoDB 两种引擎
MyISAM
MyISAM 引擎是 MySQL 5.1 及之前版本的默认引擎,它的特点是:
不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁
不支持事务
不支持外键
不支持崩溃后的安全恢复
在表有读取查询的同时,支持往表中插入新纪录
支持 BLOB 和 TEXT 的前500个字符索引,支持全文索引
支持延迟更新索引,极大提升写入性能
对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用
InnoDB
InnoDB 在 MySQL 5.5 及以后成为默认索引,它的特点是:
支持行锁,采用 MVCC 来支持高并发
支持事务
支持外键
支持崩溃后的安全恢复
不支持全文索引
InnoDB 是一个事务型存储引擎,为用户操作非常大的数据存储提供了一个强大的解决方案,已经被很多互联网公司使用。
在以下场合下,使用InnoDB是最理想的选择:
更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
事务:InnoDB 存储引擎是支持事务的标准MySQL存储引擎。
自动灾难恢复:与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
外键约束:MySQL支持外键的存储引擎只有InnoDB。
支持自动增加列 AUTO_INCREMENT 属性。
我们可以通过 show engines命令查看支持的存储引擎。
如果我们想直接查看默认支持的引擎也可以使用show variables like ‘storage_engine%’;命令实现。
mysql> show variables like 'storage_engine%';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.00 sec)
不过这个命令有点不大好记,所以一般情况下我都是使用show engines;命令,其结果的support 字段值为default的即是默认引擎。
更改默认支持的引擎
mysql5.5默认支持的存储引擎为 Innodb 我们也可以通过修改配置文件来实现让其默认支持其它的数据库。
windows下修改mysql.ini文件中的default-storage-engine=XXX配置项。
linux下修改my.cnf文件中的default_storage_engine = XXX配置项。
值得注意的是:
上面的xxx代指的是你想要的存储引擎
如果linux系统下你找不到my.cnf文件的位置 可以使用 whereis my.cnf命令进行查看
#whereis my.cnf
修改完毕后一定要记得重启mysql服务。
#service mysql restart
总结:
INNODB、MYISAM与MEMARY的区别及应用场景
1、MYISAM引擎的单表存储最大值是由计算机的文件系统限制的,而INNODB的单表最大值为64TB。
以上所说的是包括外键,索引等在内的所有内容大小。
2、MYISAM占用和使用的空间(容量)低于INNODB。
3、MYISAM和MEMARY都支持表锁,而INNODB仅支持行锁。
4、MYISAM是三者当中唯一支持数据压缩和全文索引的存储引擎。
5、MYISAM不支持数据缓存,而INNODB和MEMARY支持。
6、INNODB是三者中唯一支持事务,集群索引和外键的存储引擎。
7、MEMOEY是三者中唯一支持哈希索引的引擎,而INNODB和MYISAM则是支持BTREE索引类型。
8、在高并发的状态下MYISAM处理数据的速度会有很大的,而INNODB则十定
因为MYISAM引擎不支持事务和外键,所以整体速都比较快,但是在数据并发量较大的情况下其写入速度会有很大的衰减,
可靠性远不如INNODB。所以在对数据的完整性没有要求以及读取请求为主的应用比较适合使引擎。
INNODB引擎在事务的处理上和高并发处理上占有很大的优势,是比较可靠的存储引擎。但是其繁琐数据处理模式以及
建立的大量外键、事务等也注定了它将比INNODB占据更大的磁盘空间。因此在需要进行频繁的写操作并且对事务的
完整性比较高、需要实现并发控制的时候适合使用此引擎
MEMARY引擎使用内存来存储数据,它是三者中读写速度最快的引擎,同时也是三者中最不可靠的引擎。
因为数据存储在内存中其安全性得不到保障,十分容易丢失。但是如果某个应用需要快速访问,并且数据量比较小,
不妨考虑一下MEMARY引擎