mysql 引擎介绍

来源:互联网 发布:做网络监控用几类线 编辑:程序博客网 时间:2024/06/09 14:26
1、mysql概述
MySql数据库是开放源代码的关系型数据库。
目前,它可以提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。
与Oracle 和SQL Server等大型数据库系统一样,MySql也是客户/服务器系统并且是单进程多线程架构的数据库。
MySql区别于其它数据库系统的一个重要特点是支持插入式存储引擎。

2、mysql多种引擎 
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎,下面介绍几款引擎
2.1、 MyISAM
这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:
静态MyISAM
如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。

动态MyISAM
如果数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理

压缩MyISAM
以上说到的两种类型的表都可以用myisamchk工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。
但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。

2.2、MyISAM Merge引擎
这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。

2.3、 InnoDB
InnoDB表类型可以看作是对MyISAM的进一步更新产品,
它提供了ACID事务支持
系统崩溃修复能力
多版本并发控制(即MVCC Multi-Version Concurrency Control)的行级锁
外键约束
支持自增长列(auto_increment)

注:该引擎在5.5后的MySQL数据库中为默认存储引擎。

2.4 、memory(heap)
这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。

2.5 、archive
这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面




3、引擎查看及修改
3.1、show engines; 命令可以显示当前数据库支持的存储引擎情况
3.2、引擎设置及修改
1)、在创建表的时候直接设置引擎
创建数据库表时设置存储存储引擎的基本语法是:
Create table tableName(
columnName(列名1)  type(数据类型)  attri(属性设置),
columnName(列名2)  type(数据类型)  attri(属性设置),
……..) engine = engineName

2)、修改引擎
Alter table tableName engine =engineName

4、MyISAM和 Innodb区别
4.1、项目如何选择何种引擎
4.1.1、.Innodb引擎
优点:
1、提供了对数据库ACID事务的支持。当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。
2、提供了行级锁和外键的约束。
3、支持事务处理和故障的恢复。大容量的数据集时趋向于选择Innodb。Innodb可以利用数据日志来进行数据的恢复。主键的查询在Innodb也是比较快的
4、基于Mysql后台的完整的系统,Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。
5、同时在执行UPDATE语句在会比较的快,尤其是在并发量大的时候

缺点:
1、该引擎是不支持全文搜索的。
2、启动也比较的慢,它是不会保存表的行数的。
3、当进行Select count(*) from table指令的时候,需要进行扫描全表。

4.1.2、.MyIASM引擎
优点:
1、MyIASM引擎是保存了表的行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首先
2、大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快

缺点:
1、不提供事务的支持
2、不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。

4.2、索引数据结构区别
1、两者的索引都是基于B+树!
2、MyISAM 存储引擎的索引和 Innodb 的 Secondary Index 的存储结构也基本相同

在MyISAM里
1)、B+树的数据结构Leaf Nodes中存储的内容实际上是实际数据的地址值。
通过实际数据的地址值直接定位到 MyISAM 数据文件中相应的数据行的信息
也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。
这种索引的模式被称为非聚集索引

2)、表可以没有主键

3)、主键索引和非主键索引差别很小,只不过是主键索引的索引键是一个唯一且非空的键而已。

在Innodb里
1)、B+树的数据结构中存储的都是实际的数据,这种索引有被称为聚集索引
与MyISAM的两个重点区别:
一是primary key形态索引,这个索引的key是数据表的主键,因此InnoDB的数据文件本身就是索引文件,同时其leaf node里存放的是完整实际数据记录,不仅存放了索引键的数据,还存放了其他字段的数据。
二是secondary index形态索引,其leaf node存储相应记录主键的值而不是地址。InnoDB的所有辅助索引都引用主键作为data域

2)、表必须要有主键

原创粉丝点击