MySQL存储引擎:MyISAM存储引擎、InnoDB存储引擎

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010318270/article/details/88878777

一、InnoDB存储引擎
1、InnoDB介绍
    InnoDB的数据存储在表空间中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成。
InnoDB可以将每个表的数据和索引存放在单独的文件中。InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。

二、MyISAM存储引擎
1、MyISAM存储
    MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以.MYD和.MYI为扩展名。MyISAM表可以包含动态或静态(长度固定)行。
MyISAM会根据表的定义来决定采用何种行格式。

2、MyISAM特性
(1)加锁与并发
    MyISAM对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排他锁。
在表有读取查询的同时,可以往表中插入新的记录。(并发插入)
(2)修复
    对于MyISAM表,可以手动或自动执行检查和修复操作。执行表的修复可能导致一些数据丢失,而且修复操作非常的慢。

CHECK TABLE table_name;   //检查表的错误
REPAIR TABLE table_name;  //对错误进行修复

(3)索引特性
    对于MyISAM表,即使是BLOB和TEXT等长字段,也可以基于其前500个字符创建索引。MyISAM也支持全文索引,这是一种基于分词创建的索引。
(4)延迟更新索引键(Delayed Key Write)
    创建MyISAM表时,如果指定DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,
只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘。这种方式可以极大地提升写入性能,但是在数据库或者主机崩溃时会造成索引损坏,
需要执行修复操作。
    
3、MyISAM压缩表
    如果表在创建并导入数据后,不会再进行修改操作,那么这样的表适合采用MyISAM压缩表。
可以使用myisampack对MyISAM表进行压缩(打包pack)。压缩表可以极大地减少磁盘空间占用,因此可以减少磁盘IO,从而提升查询性能。
压缩表也支持索引,但索引是只读的。

三、两种引擎的区别
1、MyISAM是非事务安全的,而InnoDB是事务安全的。
2、MyISAM锁的粒度是表级的,而InnoDB支持行级锁。
3、MyISAM支持全文类型索引,而InnoDB不支持全文索引。
MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果应用中执行大量select操作,应选择MyISAM存储引擎。
InnoDB用于事务处理,具有ACID事务支持等特性,如果应用中执行大量insert和update操作,应选择InnoDB存储引擎。

猜你喜欢

转载自blog.csdn.net/u010318270/article/details/88878777