MYSQL存储引擎

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.区别

存储引擎索引结构外键存储限制全文索引插入数据的速度
InnoDBB+树YES64TB行锁NO
MyISAMB-树NORAM表锁YES
MEMORY哈希索引NO256TB表锁NO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值