MySQL存储引擎
1.存储引擎的概念
- 众所周知,MySQL中的数据通过各种不同的技术存储在文件(或者内存)中
- 这些技术都使用不同的存储机制,索引技巧,锁定水平且提供不同的功能和其具有的能力
- 通过选择不同的技术,能够获得额外的速度或者功能,从而改善你的应用的整体功能
- 这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎
2.查看当前使用的引擎
show engines; #查看当前版本默认支持的数据库引擎
show variables like '%storage_engine'; #查看当前数据库使用的引擎
存储引擎
1. InnoDB
事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。
InnoDB主要特性有:
①InnoDB给MySQL提供了具有提交、回滚、崩溃恢复能力的事务安全存储引擎。
②InnoDB 是为处理巨⼤数据的 CPU 效率⽐其他基于磁⾼。
③InnoDB 存储引擎⾃带缓冲缓存在内存中。
④InnoDB ⽀持外键完整性约
⑤InnoDB 被⽤在众多需要⾼上使⽤
⑥InnoDB ⽀持⾏级锁
2.MyISAM
①MyISAM 基于 ISAM 存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最长使用的存储引擎之⼀。MyISAM 拥有较高的插入、查询速度,但不⽀持事务。
MyISAM主要特性有:
1. ⼤⽂件⽀持更好
2. 当删除、更新、插⼊混⽤时,产生更少碎片
3. 每个 MyISAM 表最⼤索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16
4. 最⼤的键⻓度是1000字节
5. BLOB和TEXT列可以被索
6. NULL 被允许在索引的列中,这个值占每个键的0~1个字节
7. 所有数字键值以⾼字节优先被存储以允许一个更高的索引压缩
8. MyISAM 类型表的 AUTO_INCREMENT列更新比InnoDB 类型的 AUTO_INCREMENT更快
9. 可以把数据⽂件和索引文件放在不同目录
10. 每个字符列可以有不同的字符集
11. 有 VARCHAR 的表可以固定或动态记录⻓度
12. VARCHAR 和 CHAR 列可以多达 64KB
13. 只⽀持表锁
14. ⽀持FULLTEXT KEY(全⽂索引)
3.MEMORY
MEMORY 存储引擎将表中的数据存储到内存中,为 查询和引⽤其他表数据提供快速访问。
4.BLACKHOLE
⿊洞引擎⼀般是作为伪主机,⽤来缓解master的压⼒ 的⼀总主从架构的中间机器使⽤, 只产⽣⽇志,不保存数据。
3.存储引擎的选择
⼀般来说,对插⼊和并发性能要求较⾼的,或者需要外 键,或者需要事务⽀持的情况下,需要选择 InnoDB, 插⼊较少,查询较多的场景,优先考虑 MyISAM。
4.指定引擎
create table abc(
name char(10)
)engine=MyISAM charset=utf8;
create table xyz(
name char(10)
)engine=InnoDB charset=utf8;
alter table table_name engine=innodb|myisam
5、InnoDB 和 MyISAM 在⽂件⽅⾯的 区别
- InnoDB 将⼀张表存储为两个⽂件
① demo.frm -> 存储表的结构和索引
②demo.ibd -> 存储数据,ibd 存储是有限的, 存储 不⾜⾃动创建 ibd1, ibd2 - MyISAM 将⼀张表存储为三个⽂件
①demo.frm -> 存储表的结构
②emo.myd -> 存储数据
③demo.myi -> 存储表的索引
通过一张图可以看出InnoDB和MyISAM的区别
锁机制
锁是计算机协调多个进程或线程并发访问某⼀资源的机 制。
锁保证数据并发访问的⼀致性、有效性;
锁冲突也是影响数据库并发访问性能的⼀个重要因素。
锁是Mysql在服务器层和存储引擎层的的并发控制。
通过一张思维导图看一下锁分类
#查看表中有没有被锁
show open tables;
#加上读写锁
lock table stuinfo read;
lock table stuinfo write;
#解除锁
unlock tables;
数据库中有许多需要锁处理的情况百度可见