首页 > 数据库 >Mysql:存储引擎

Mysql:存储引擎

时间:2022-11-15 16:58:10浏览次数:68  
标签:存储 支持 索引 引擎 InnoDB Mysql 数据

InnoDB 引擎和MyISAM 引擎

InnoDB 引擎

  • MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。
  • InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务 的完整提交(Commit)和回滚(Rollback)。
  • 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
  • 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
  • 数据文件结构:
    • 表名.frm 存储表结构(MySQL8.0时,合并在表名.ibd中)
    • 表名.ibd 存储数据和索引
  • InnoDB是 为处理巨大数据量的最大性能设计
    • 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除 了。比如: .frm , .par , .trn , .isl , .db.opt 等都在MySQL8.0中不存在了。
  • 对比MyISAM的存储引擎, InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。
  • MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据, 对内存要求较 高 ,而且内存大小对性能有决定性的影响。

MyISAM 引擎

  • MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、行级锁、外键 ,有一个毫无疑问的缺陷就是 崩溃后无法安全恢复
  • 5.5之前默认的存储引擎
  • 优势是访问的 速度快 ,对事务完整性没有要求或者以SELECT、INSERT为主的应用
  • 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
  • 数据文件结构:
    • 表名.frm 存储表结构
    • 表名.MYD 存储数据 (MYData)
    • 表名.MYI 存储索引 (MYIndex)
  • 应用场景:只读应用或者以读为主的业务

其他引擎

Archive 引擎:用于数据存档

特征 支持
B树索引 不支持
备份/时间点恢复 (在服务器中实现,而不是在存储引擎中) 支持
集群数据库支持 不支持
聚集索引 不支持
压缩数据 支持
数据缓存 不支持
加密数据(加密功能在服务器中实现) 支持
外键支持 不支持
全文检索索引 不支持
地理空间数据类型支持 支持
地理空间索引支持 不支持
哈希索引 不支持
索引缓存 不支持
锁粒度 行锁
MVCC 不支持
存储限制 没有任何限制
交易 不支持
更新数据字典的统计信息 支持

Blackhole 引擎

其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉, 不做实际存储;Select语句的内容永远是空。 和Linux中的 /dev/null 文件完成的作用完全一致。

该引擎的详细作用可参考:MySQL的BlackHole引擎在主从架构中的作用 - 温柔的风 - 博客园 (cnblogs.com)

CSV 引擎

存储数据时,以逗号分隔各个数据项

测试如下:

CREATE TABLE test (i INT NOT NULL, c CHAR(10) NOT NULL) ENGINE = CSV;
INSERT INTO test VALUES(1,'record one'),(2,'record two');

image-20221115163337374

创建CSV表还会创建相应的 元文件 ,用于 存储表的状态表中存在的行数 。此文件的名称与表的名称相同,后缀为 CSM 。如图所示

image-20221115163532761

查看csv文件:

cat test.CSV

image-20221115163609699

此csv文件可直接用Excel打开:

image-20221115163710585

Memory 引擎

Memory采用的逻辑介质是 内存响应速度很快 ,但是当mysqld守护进程崩溃的时候 数据会丢失 。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。

主要特征:

  • Memory同时 支持哈希(HASH)索引 和 B+树索引 。
  • Memory表至少比MyISAM表要 快一个数量级 。
  • MEMORY 表的大小是受到限制 的。表的大小主要取决于两个参数,分别是 max_rowsmax_heap_table_size 。其中,max_rows可以在创建表时指定;max_heap_table_size的大小默 认为16MB,可以按需要进行扩大。
  • 数据文件与索引文件分开存储。
  • 缺点:其数据易丢失,生命周期短。基于这个缺陷,选择MEMORY存储引擎时需要特别小心。

使用Memory存储引擎的场景:

  1. 目标数据比较小 ,而且非常 频繁的进行访问 ,在内存中存放数据,如果太大的数据会造成 内存溢 出 。可以通过参数 max_heap_table_size 控制Memory表的大小,限制Memory表的最大的大 小。
  2. 如果 数据是临时的 ,而且 必须立即可用 得到,那么就可以放在内存中。
  3. 存储在Memory表中的数据如果突然间 丢失的话也没有太大的关系

Federated 引擎

Federated引擎是访问其他MySQL服务器的一个 代理 ,尽管该引擎看起来提供了一种很好的 跨服务 器的灵活性 ,但也经常带来问题,因此 默认是禁用的

基本使用可参考:MySQL FEDERATED 存储引擎的使用 - ZhenXing_Yu - 博客园 (cnblogs.com)

Merge引擎

管理多个MyISAM表构成的表集合

基本使用可参考:MySQL Merge存储引擎_程序猿老高的博客-CSDN博客

NDB引擎

也叫做 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群 环境,类似于 Oracle 的 RAC 集 群。

基本使用可参考:NDB Cluster (分布式存储引擎)存储引擎简单简介及Mysql cluster的实现

标签:存储,支持,索引,引擎,InnoDB,Mysql,数据
From: https://www.cnblogs.com/wwjj4811/p/16892975.html

相关文章

  • MySQL驱动表和被驱动表说明
    老男孩Linux运维MySQL中级DBA-第12章-MySQL驱动表和被驱动表说明-补#驱动表和被驱动表####1.什么是驱动表和被驱动表?在join连接查询中,驱动表在SQL语句执行的过程中总......
  • MySQL、Kafka(含zookeeper)、Redis的docker-composer文件
    以下docker-composer文件仅用于开发环境,快速搭建原型使用,生产环境,请进行针对性设置。MySQLversion:'3.1'services:db:image:mysql:8.0.28command:--d......
  • mysql动态新增字段
    使用PREPARE预处理语句动态新增字段,先判断表的字段是否存在,如果存在不新增,反之新增。--1.动态新增字段(储存过程);--结束符号DROPprocedureifEXISTSsp_add_col......
  • Centos7安装MySQL8.0-操作手册
    一.Mysql8.0.31安装(YUM方式)1)首先删除系统默认或之前可能安装的其他版本的mysql或者mairadb[root@mysql-8.0~]#foriin$(rpm-qa|grep-E"mysql|mariadb");dor......
  • logstash 同步mysql 到elasticsearch
    1.下载logstash要和es的版本一致 用的是7.17.6     下载地址:https://www.elastic.co/cn/downloads/past-releases#logstash2.配置  LS_JAVA_HOME  系......
  • mysql详细学习笔记
    连接与断开服务器mysql-h地址-P端口-u用户名-p密码mysql>SHOWPROCESSLIST;显示哪些线程正在运行+----+------+-----------+------+---------+------+----......
  • mysqld_safe Directory '/tmp/mysql' for UNIX socket file don't exists.
    报错版本:mysql-5.7.351、报错完整提示信息;[root@localhostbin]#2022-11-15T04:04:43.122905Zmysqld_safeLoggingto'/var/log/mysql.log'.2022-11-15T04:04:43.1......
  • 阿里云微服务引擎 MSE 9 月份产品动态
    ......
  • (初学)记一次dockercompose安装mysql8 以及问题
    docker-compose文件如下:1version:'3'2services:3#mysql服务4service-mysql:5image:docker.io/mysql:8.0.276command:7--def......
  • 临时对象存储池
    Go1.3的sync包中加入一个新特性:Pool。官方文档可以看这里http://golang.org/pkg/sync/#Pool这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。......