这里主要介绍mysql两个主要引擎:INNODB、MYISAM。MySQL默认存储引擎是MYISAM。
一、INNODB存储引擎
innodb引擎提供了对数据库ACID事务支持、行级锁和外键约束,处理大数据量的数据库系统。Mysql运行时innodb会在内存中建立缓存池,用于缓存数据和索引。但是该索引不支持全文搜索。不会保存表的行数,例如:count(*)是全表扫描。由于锁的颗粒小写入操作时不会锁定全表。
-
适用场景
1)经常写入操作、并发更新请求。
2)支持事务回滚、数据恢复(通过bin-log日志)
3)支持外键约束
4)支持自增列auto_increment
二、MYISAM存储引擎
myisam引擎是mysql默认的存储引擎,它不支持事务、行级锁、外键约束,在执行写入操作时需要锁定全表,效率低。myisam可以保存行数,例如:count(*)不会扫描全表而是直接读取行数,效率高。读取数据大过写入操作myisam很适用。
- 适用场景
2)经常对表进行枷锁的场景、不支持外键。
3)查询效率很高
4)不能自动表损坏恢复数据
三、INNODB与MYISAM使用索引数据结构
innodb和myisam都是使用B+Tree结构
MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。
Innodb引擎的索引存储的是实际的数据。
四、INNODB与MYISAM的区别
- innodb主键索引
表数据文件本身就是索引文件,必须要有主键。
2. InnoDB的辅助索引(Secondary Index, 也就是非主键索引)
会包含主键列,比如名字建立索引,内部节点会包含名字,叶子节点会包含该名字对应的主键的值,如果主键定义的比较大,其他索引也将很大。
3. myisam主索引和辅助索引(Secondary key)
结构上和innodb没有任何区别,只是主索引要求key是唯一的,辅助索引可以重复,结构上没有任何区别,只是主索引要求key是唯一的,辅助索引可以重复。
五、修改存储 引擎的几种方式
1、修改配置文件my.ini
将mysql.ini另存为my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB
2、建表指定
create table user(
id int primary key,
name varchar(50)
)type=Innodb;
3、建表后更改
alter table user
type = InnoDB;
查看修改是否成功:
show table status from user
;
mysql其他存储引擎
Memory, Blackhole, CSV, Performance_Schema,Archive, Federated , Mrg_Myisam