MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎
0. 查看 MySQL 支持的存储引擎
可以在 mysql 客户端中,使用 show engines;
命令可以查看MySQL支持的引擎:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.06 sec)
1. InnoDB 引擎
InnoDB 是 MySQL 默认的存储引擎,也是最重要、使用最广泛的存储引擎。
InnoDB 的性能和自动崩溃恢复特性,使得它在非事务型存储的需求中也很流行。
除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑 InnoDB 引擎。
InnoDB 的特性
- 支持事务。
- 支持外键约束。
- 支持行级锁机制。
- 支持崩溃后的安全恢复。
- 通过一些机制和工具支持真正的热备份。
- 会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引,因此InnoDB的表需要更多的内存和存储空间。
- InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。
- InnoDB 不保存表的具体行数,执行
select count(*) from table
时需要全表扫描。
InnoDB 存储表和索引有两种方式
使用共享表空间存储: 表结构保存在 .frm
文件中,数据和索引在 innodb_data_home_dir
和 innodb_data_file_path
定义的表空间中,可以是多个文件。
使用多表空间存储: 表结构保存在 .frm
文件中,每个表的数据和索引单独保存在 .ibd
中。
InnoDB 的使用场景
更新密集的表: InnoDB存储引擎特别适合处理多重并发的更新请求。
事务: InnoDB存储引擎是支持事务的标准MySQL存储引擎。
自动灾难恢复: InnoDB表能够自动从灾难中恢复。
外键约束: MySQL支持外键的存储引擎只有InnoDB。
支持自动增加列 AUTO_INCREMENT 属性。
2. MyISAM 引擎
MyISAM 是 MySQL 5.1 及之前版本的默认存储引擎。MySQL 8 即将废弃 MyISAM 引擎。
MyISAM 提供了全文索引、压缩、空间函数(GIS)等特性。
MyISAM 不支持事务和行级锁,崩溃后无法安全恢复。
MyISAM 的特性
- 支持全文索引。
- 支持表级锁,不支持行级锁。
- 不支持事务。
- 拥有较高的插入,查询速度。
- MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
- MyISAM 用一个变量保存了整个表的行数,执行
select count(*) from table
时只需要读出该变量即可,速度很快。
MyISAM 的三种存储格式
MyISAM 的三种存储格式分别为静态、动态和压缩。MyISAM 会根据表的定义自动选择存储格式。
静态表: 如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。
动态表: 如果数据表中出现 varchar
、*text
或 *BLOB
字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用 optimize table
命令或优化工具来进行碎片整理。
压缩表: 以上说到的两种类型的表都可以用myisamchk工具压缩。如果表在创建并导入数据后,不在进行修改操作,这样的表适合采用 MyISAM 压缩表。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。
MyISAM 表存储
每个 MyISAM 表在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。
.frm
文件存储表结构定义。
.MYD
(MYData) 文件存储表的数据。
.MYI
(MYIndex) 文件存储表的索引。
MyISAM 使用场景
查询密集型表: MyISAM 存储引擎在筛选大量数据时非常快,是它最突出的优点;
插入密集型表: MyISAM 的并发插入特性允许同时选择、插入数据。例如:MyISAM存储引擎非常适合管理邮件或Web服务器日志数据。
3. MEMORY 引擎
MEMORY 引擎(也叫 HEAP 引擎),将所有数据都保存在内存中,不需要进行磁盘I/O。因此,MEMORY表至少比 MyISAM 表快一个数量级。
MySQL 重启或 mysqld 守护进程崩溃时,Memory 表的结构还会保留,但是所有的数据都会丢失。
获得速度的同时也带来一些缺陷。它要求存储在Memory数据表里的数据用的是长度不变的格式,这意味着不能用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。
MEMORY 的特性
- 数据都保存在内存中,不需要进行磁盘I/O。
- 支持 Hash 索引和B树索引。
- 支持表级锁,不支持行级锁。
- 服务重启后,表结构还会保留,但是数据会丢失。
- 不支持 TEXT 和 BLOB 类型的列。
MEMORY 使用场景
- 需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系。
- 用于查找(lookup)或者映射(mapping)表,例如将邮编和地址映射的表。
- 用于保存数据分析中产生的中间数据。
- 用于缓存周期性聚合数据的结果。
4. ARCHIVE 引擎
ARCHIVE 引擎是一个针对插入和压缩做了优化的简单存储引擎。
ARCHIVE 引擎只支持 INSERT 和 SELECT 操作。MySQL 5.1 之前也不支持索引。
ARCHIVE 引擎会利用 zlib 对插入的行进行压缩,所以比 MyISAM 表的磁盘 I/O 更少。
ARCHIVE 的特性
- 只支持 INSERT 和 SELECT 操作。
- MySQL 5.1 之前不支持索引。
- 支持行级锁和专用缓冲区。
ARCHIVE 使用场景
- 适合日志和数据采集类应用,这类应用做数据分析时往往需要全表扫描。
- 需要快速 INSERT 操作的场景。
5. MERGE 引擎
MERGE 存储引擎是 MyISAM 引擎的变种。MERGE 表是由多个 MyISAM 表合并而来的虚拟表,这些MyISAM表结构必须完全相同。Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。
Merge存储引擎使用场景对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定时间端相关。例如:可以用12个相同的表来存储服务器的日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表时,这意味着需要编写、更新多表查询,以反映这些表中的信息。与其编写这些可能会出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表而不影响原来的数据,删除Merge表只会删除掉Merge表的定义,对内部表没有任何影响。
但是引入分区功能后,该引擎已经被放弃。
6. CSV 引擎
CSV 引擎可以将普通的 CSV 文件作为 MySQL 的表来处理,但是这种表不支持索引。
CSV 的特点
- 可以将普通的 CSV 文件作为 MySQL 的表来处理。
- 所有的列必须都是不能为NULL的
- 不支持索引(不适合大表,不适合在线处理)
- 可以对数据文件直接编辑(保存文本文件内容)
CSV 使用场景
- 适合做为数据交换的中间表(能够在服务器运行的时候,拷贝和拷出文件,可以将电子表格存储为CSV文件再拷贝到MySQL数据目录下,就能够在数据库中打开和使用。同样,如果将数据写入到CSV文件数据表中,其它web程序也可以迅速读取到数据。
MySQL基础知识点整理 - 存储引擎相关推荐
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- MySQL基础知识点整理 - 账号和权限管理
MySQL基础知识点整理 - 账号和权限管理 一.账号管理 1. 查看账号列表 MySQL用户账号和信息存储在名为 mysql 的数据库中.一般不需要直接访问 mysql 数据库和表,但有时需要直接访 ...
- 【MySQL】MySQL进阶之路(三)MySQL基础知识点整理
写在前面的话 脑子是个好东西,可惜的是一直没有搞懂脑子的内存删除机制是什么,所以啊,入行多年,零零散散的文章看了无数,却总是学习了很多也忘了很多. 痛定思痛的我决定从今天开始系统的梳理下知识架构,记录 ...
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...
- MySql基础知识、存储引擎与常用数据类型
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文将主要讲解了数据库的一些基础知识,介绍了MySql的存储引擎,最后讲了MySql常用的数据 ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- Java 培训 MySQL 体系构架、存储引擎和索引结构
对某项技术进行系统性的学习,始终离不开对该项技术的整体认知.只有领略其全貌,方可将各块知识点更好的串联起来.为了进一步理解和学习 MySQL,我们有必要了解一下 MySQL 的体系构架.存储引擎和索引 ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...
最新文章
- 引进博士:118万安家房补+18万经费;硕士:42万安家房补+10万经费
- linux_vim编辑文件无法高亮显示解决方法
- 谷歌浏览器添加JSON-Handle插件
- 三维可视化模块发布了
- FreeBSD portupgrade升级你的FreeBSD软件[zt]
- falcon适配ldap密码同步
- 《南溪的目标检测学习笔记》——目标检测的评价指标(mAP)
- 绑定流详解——网络测试仪实操
- 用力和应变片计算弹性模量_电阻应变片粘贴及弹性模量的测定实验报告徐姗.doc...
- 计算机自带的命令提示符,Windows 10上有十种打开命令提示符的方法,你知道多少...
- STM32控制启动步进电机
- 如何使用Hulu观看晚会与朋友一起看电视
- 别让西药毁了凉茶!盒马牵手平安堂,能放心喝的凉茶来了
- excel表格打印每页都有表头_【Excel】打印超长表格,怎么才能每页都显示表头?...
- 网页制作 - 问卷网的首页
- 在美国成年人群体中,语音助手Siri已经成了第二大移动搜索引擎
- 微信小程序解析并上传excel
- 蓝牙HCI command/event/acl/sco格式介绍
- 拼多多客户差评回复话术
- 广州Java工程师平均薪资_【广州恒生电子工资】java开发工程师待遇-看准网