MySQL存储引擎

来源: 2024-07-06 20:13:26 播报

MyISAM存储引擎

1、不支持事务、不支持外键,对数据的查询缓存只会缓存索引,不会像InnoDB一样缓存数据,而且是利用操作系统本身的缓存;

2、支持表级锁,不支持行级锁,所以并发度很差

3、MyISAM的数据表在磁盘有三个文件 frm 表结构文件、MYD 数据文件、MYI 索引文件

4、在创建MyISAM的数据表时可以指定数据文件和索引文件的储存位置,并且只有MyISAM才支持

DATA DIRECTORY [=] 数据保存的绝对路径

INDEX DIRECTORY [=] 索引文件保存的绝对路径

5、MyISAM 单表最大支持的数据量是2的64次方记录

6、每个表最多可以建立64个索引

7、如果是复合索引 ,每个复合索引最多包含16个列,索引的最大长度是1000B

8、MyISAM引擎的存储格式

定长 (FIXED静态)是指字段中不包含VARCHAR/TEXT/BLOB的静态表

动态(DYNAMIC)是指字段中包含了VARCHAR/TEXT/BLOB的数据表

压缩(COMPRESSED)myisampack工具创建

特点:

MyISAM最简单最安全的数据格式,查找速度最快的,当出现崩溃时恢复最快静态表以空间换时间

InnoDB存储引擎

从MySQL5.5版本之前默认存储引擎是MyISAM,在MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了

主要特点有:

1、自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

InnoDB存储引擎遵循ACID模型,支持事务,具有从服务崩溃中恢复的能力,能够最大限度的保护用户数据

1、支持行级锁,可以提升多用户并发时的读写性能。

2、支持外键,保证数据的一致性和完整性

3、InnoDB拥有自己独立的缓冲池,常用的数据和索引都在缓存中

4、对于INSERT UPDATE DELETE,InnoDB会使用一种change buffering 的机制来自动优化,还可以提供一致性的读并且还能够缓存变更的数据,减少磁盘的I/O来提高性能

5、在创建InnoDB的数据表之后会产生两个文件

.frm表结构文件

.ibd文件,数据和索引储存表空间中

6、所有的表都需要创建主键,最好是配合上AUTO_INCREMENT,也可以放到经常查询的列作为主键。

7、Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高。

如何选择合适的存储引擎

1、是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM。

2、是否需要支持高并发,InnoDB的并发度远高于MyISAM。如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。

3、是否需要支持外键。

4、是否需要支持在线热备。

5、高效缓冲数据,InnoDB对数据和索引都做了缓冲,而MyISAM只缓冲了索引。

6、索引,不同存储引擎的索引并不太一样。

给数据表加上存储引擎:

1、在建表的时候指定

create table mytbl(  
id int primary key,  
name varchar(50)  
)type=MyISAM;

2、修改存储引擎类型

alter table table_name type = InnoDB;

3、查看表的存储引擎

格式:

show table status from table_name;

格式:

show create table table_name

使用数据库管理工具啊。

看你的mysql当前默认的存储引擎:

mysql> show variables like '%storage_engine%';
 ---------------- -------- 
| Variable_name  | Value  |
 ---------------- -------- 
| storage_engine | InnoDB |
 ---------------- -------- 
1 row in set (0.00 sec)

MySQL支持哪些数据库引擎,可以通过 show engines; 语句查看。