mysql-存储引擎
2023-05-08 本文已影响0人
ssttIsme
存储引擎是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
show crate table 表名;
ENGINE=
就是引擎名
root@localhost:bank>show create table bank;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| bank | CREATE TABLE `bank` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`address` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
查看当前数据库支持的存储引擎
SHOW ENGINES;
root@localhost:bank>show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
Engine代表有哪些存储引擎、Support是否支持、Comment是注释、XA协议与Savepoints保存点与事务相关
InnoDB
介绍
InnoDB是一种兼顾高可靠性和高性能的存储引擎,在MySQL 5.5之后,InnoDB是默认的MySQL存储引擎。
特点-事务、外键、行级锁
DML操作遵循ACID模型,支持事务;
行级锁,提高并发访问性能;
支持外键ROREIGN KEY约束,保证数据的完整性和正确性。
文件
xxx.ibd:xxx代表的是表名,innodDB引擎的每张表都会对应一个表空间文件
,存储该表的结构(frm,sdi(8.0后))、数据、索引。
root@localhost:bank>show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF |
+-----------------------+-------+
存储引擎特点
逻辑存储结构【>表示包含】:表空间Table>段Segment>Extent区>Page页>Row行
- 页是磁盘操作的最小单元
- 一个区的大小是固定是1M
- 一个页的大小固定是16K
- 一个区可以包含64个页
MyISAM
介绍
MyISAM是MySQL早期默认的存储引擎
特点-不支持事务、外键、表锁、访问速度快
不支持事务、不支持外键
支持标锁,不支持行锁
访问速度快
文件
sdi存储表结构、MYD存储数据、MYI存储索引
Memory
介绍
Memory引擎的表数据存储在内存中,由于受到硬件问题、断电问题的影响,只能将这些表作为临时表或者缓存使用。
特点-内存存放访问速度快、哈希索引
内存存放
hash索引(默认)
表锁
不支持外键
文件
只有sdi存储表结构信息(数据都是存在内存中)
存储引擎特点
特点 | InnoDB | MyISAM | Memory |
---|---|---|---|
存储限制 | 64TB | 有 | 有 |
事务安全 | 支持 | - | - |
锁机制 | 行锁 | 表锁 | 表锁 |
支持外键 | 支持 | - | - |
B+tree索引 | 支持 | 支持 | 支持 |
Hash索引 | - | - | 支持 |
全文索引 | 5.6版本后支持 | 支持 | - |
磁盘空间使用 | 高 | 低 | - |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |