欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql-存储引擎

程序员文章站 2022-07-09 23:53:22
...

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 存储引擎