mysql-存储引擎
mysql-存储引擎
mysql 存储引擎一般有 MyISAM、InnoDB、Memory、Merge、BDB、EXAMPLE、Federated 存储引擎。
一、MyISAM存储引擎
不支持事务的存储引擎,它是基于更老的ISAM存储引擎,每个MyISAM 存储引擎类型的表在磁盘上存储3个文件:tablename.frm存储定义文件、tablename.MYD :存储表的数据文件 tableName.MYI存储表的索引文件。我们指明设置一个表的存储引擎为MyISAM 存储引擎可以:Create table t(i int primarykey) engine=MyISAM ,注意老版本(5.1之前)的是使用type关键字 ,而从5.1之后是使用engine关键字。MyISAM存储引擎是mysql默认的存储引擎,但是在5.5以及5.5版本之后mysql的默认存储引擎是InnoDB 存储引擎。
MyISAM存储引擎的特性:
1、每个MyISAM存储引擎的表最大支持64个索引文件
2、blob和text列可以被设置为索引
3、提供高速的存储和压缩表以及全文检索功能
4、MyISAM是对整个表进行加锁的,不是对行锁的,读取时候会对其读取的所有表进行加共享锁,写入的时候会对表加入排他锁,但是在表的读取查询的同时,也可以往表里插入新的记录。
5、MyISAM表使用了B型树的索引 索引文件大小为: (key_length +4) * 0.67 加上所有键的和。
6、MyISAM支持三种不同的存储格式:固定格式、动态格式和压缩格式,固定格式和动态格式根据正在使用的列进行自动选择,对于已经压缩的格式则必须使用myisampack工具来创建。
7、MyISAM存储引擎使用前缀压缩使得索引更小。
二、InnoDB存储引擎
InnoDB给mysql数据库提供了具有提交、回滚和崩溃恢复的事务安全存储引擎,InnoDB锁定在行级别并也在查询的select语句中非锁定读--这些特性增加了mysql数据库的吞吐量,我们都知道mysql在解决高并发的环境下使用了共享锁和排他锁(其实这就像我们在java语言中的JDK1.5中添加的并发包中的ReentrantReadWriteLock 类,多个线程可以持有读锁-共享锁,有且仅当有一个线程具有写锁-排他锁,并且写锁的优先级最高,当写锁到达的时候必须插入到所有读锁之前,其他获得的读锁的线程必须等待写锁完成)那如何看待Innodb的性能呢? 1、innodb是行级别的锁定适合非常小的空间而不是像MyISAM存储引擎基本上是整张表进行锁定,innodb支持外键特性 innodb是为处理巨大数据量的最大性能而设计的,它为主内存中缓冲数据和索引而维护自己的缓冲池,innodb存储它的表和索引在一个表的空间中,表空间可以包含数个文件 innodb表可以使任何尺寸的,即使文件大小受操作系统的限制也是可以的。
被InnoDB存储引擎所管理的资源包含有innodb的表空间和它的日志文件。
未完待续。。。。。。
上一篇: 批量修改数据库表的存储引擎类型的脚本
下一篇: MySQL各种存储引擎的对比