文章目录
1.MYSQL 存储引擎概述
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
上面是MYSQL 存储引擎的信息。
Support: 表示MYSQL 是否支持该存储引擎,DEFAULT 说明InnoDB是MYSQL 的默认存储引擎
Transaction:表示该存储引擎是否支持事物。
2. 常见的存储引擎
2.1 InnoDB
2.1.1锁
共享锁(S Lock):允许事物读一行数据,也就是读锁。多个事务可以同时读取这行数据。
排他锁(X Lock):允许事物更新或者删除一行数据,也就是写锁。每次只有一个事务可以拿到该锁。
InnoDB 支持的是行锁,锁的粒度较小,并发量大,可能会产生死锁。
2.1.2 索引
InnoDB 采用B+树来存储索引,叶子节点存储的是与主键的值相对应的行的记录。索引值与数据存储在一起,是聚集索引。辅助索引叶子节点存储的是索引值和主键的值。
2.1.3 事务
InnoDB 支持事物的提交、回滚操作。
InnoDB 默认一条SQL语句为一个事务,在某些情况下我们需要设置多个SQL语句为一个事务,则可以通过bagin 开启一个事务,当事务全部完成则commit 事务,若中间啊发生异常则rollback 事务,撤销前面的操作。
2.1.4 外键
InnoDB还支持外键(FOREIGN KEY)。外键所在的表叫做子表,外键所依赖(REFERENCES)的表叫做父表。父表中被字表外键关联的字段必须为主键。当删除、更新父表中的某条信息时,子表也必须有相应的改变,这是数据库的参照完整性规则。
2.1.5 自增长实现
innoDB 可以设置主键为自增长序列,如果没有主键的话,如则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
2.1.6 表的文件
InnoDB 会产生两个表,分别为.frm和.idb。.frm 存储的是表的定义文件,.idb存储的是表的数据文件。
2.2 MyISAM
2.1.1 索引
MyISAM 的索引采用B 树结构,非叶子节点只存储索引值,叶子节点存储索引值以及该索引所在行的地址,它的文件和索引数据是分离的,是非聚集索引。
2.2.2 表的存储文件
MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frm、MYD、MYI。其实,frm文件存储表的结构;MYD文件存储数据,是MYData的缩写;MYI文件存储索引,是MYIndex的缩写。
支持的锁是表锁,锁的力度大,并发量低,不会产生死锁。
缺点
MyISAM 不支持事务以即并发性。
优点
占用空间小,处理速度快
2.3 MEMORY
MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。这些特性与前面的两个很不同。
2.3.1 索引
MEMORY默认使用哈希索引。速度比使用B型树索引快。当然如果你想用B型树索引,可以在创建索引时指定。
2.3.2 文件结构
每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。
MEMORY 不支持排序,不适合区间查找
注意
MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。
3.使用场景
InnoDB
- 写多读少,并发量大的时候。
MyISAM
- 读多写少,并发量小的时候。
- MyISAM表索引在处理文本索引时更具优势
4.区别
存储引擎 | 索引结构 | 外键 | 存储限制 | 锁 | 全文索引 | 插入数据的速度 |
---|---|---|---|---|---|---|
InnoDB | B+树 | YES | 64TB | 行锁 | NO | 低 |
MyISAM | B-树 | NO | RAM | 表锁 | YES | 高 |
MEMORY | 哈希索引 | NO | 256TB | 表锁 | NO | 高 |