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; 语句查看。