mysql存储引擎

存储引擎:

负责数据、日志的存储的管理
mysql中最主要使用的是myisam(5.5以前默认)、innodb(5.5.以后默认)

MyISAM:

MyISAM存储引擎特点:

  • 不支持事务
  • 表级锁定
  • 读写相互阻塞,写时不能读,读时不能写
  • 只缓存索引
  • 不支持外键约束
  • 不支持聚簇索引
  • 读取数据较快,占用资源较少
  • 不支持MVCC(多版本并发控制机制)高并发
  • 崩溃恢复性较差
  • MySQL5.5.5前默认的数据库引擎

MyISAM存储引擎适用场景

  • 只读(或者写较少)
  • 表较小(可以接受长时间进行修复操作)

MyISAM引擎文件

  • tbl_name.frm 表格式、结构定义
  • tbl_name.MYD 数据文件
  • tbl_name.MYI 索引文件

InnoDB:

InnoDB存储引擎特点:

  • 行级锁
  • 支持事务,适合处理大量短期事务
  • 读写阻塞与事务隔离级别相关
  • 可缓存数据和索引
  • 支持聚簇索引
  • 崩溃恢复性更好
  • 支持MVCC高并发
  • 从MySQL5.5后支持全文索引
  • 从MySQL5.5.5开始为默认的数据库引擎

InnoDB数据库文件

  • row 行。数据存储的最小单元
  • page 页,用于存放row的的,一页默认16k大小
  • extent 盘区,用于存放页的,一般存 64页
  • segment 段,用于存放extent的
  • tablespace 表空间,也就是磁盘上的文件,存放segment的

5.5版本以下mysql的innodb:

所有InnoDB表的数据和索引放置于同一个表空间中

数据文件:

  • ibdata1, ibdata2 , 存放在datadir定义的目录下
  • tb_name.frm , 表格式定义,存放在datadir定义的每个数据库对应的目录下

5.5以上版本mysql的innodb:

每个表单独使用一个表空间存储表的数据和索引

两类文件放在对应每个数据库独立目录中:

  • tb_name.ibd 数据文件(存储数据和索引)
  • tb_name.frm 表格式定义

启用innodb:

#查看是否开启,5.5以下默认off,以上默认on
show variables like 'innodb_file_per_table';    

#临时开启
set global  innodb_file_per_table='ON';     

#永久开启
vim /etc/my.cnf.d/mariadb-server.cnf 
[mysqld]
innodb_file_per_table=1

myisam和innodb的差别:

  • myisam不支持集群索引,innodb支持
  • myisam不支持数据缓存,innodb支持
  • myisam不支持外键,innodb支持
  • myisam不支持全文索引,innodb支持
  • myisam只支持表级别锁,innodb支持行级别锁
  • myisam不支持mvcc机制,innodb支持。此机制为:

每个表创建时,会有两个隐藏字段创建,分别是insert、delect。前者是一条数据插入时,会有一个记录数值记录在对应的插入那行的insert字段,删除同理。所以方便了数据找回、多人同时访问数据

  • innodb只支持64T存储空间,myisam支持256TB
  • myisam不支持事务机制,innodb支持。用来保障数据一致性的,事务是:

一个或多个动作组合而成,进行时必须是全部都要完成,不能只做一半。要么都做,要么不做

其它存储引擎:

Performance_Schema Performance_Schema数据库使用
Memory 将所有数据存储在RAM中,以便在需要快速查找参考和其他类似数据的环境中进行快速访问。适用存放临时数据。引擎以前被称为HEAP引擎
MRG_MyISAM 使MySQL DBA或开发人员能够对一系列相同的MyISAM表进行逻辑分组,并将它们作为一个对象引用。适用于VLDB(Very Large Data Base)环境,如数据仓库
Archive 为存储和检索大量很少参考的存档或安全审核信息,只支持SELECT和INSERT操作;支持行级锁和专用缓存区
Federated联合 用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取,提供链接单独MySQL服务器的能力,以便从多个物理服务器创建一个逻辑数据库。非常适合分布式或数据集市环境
BDB 分布式使用。可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性
Cluster/NDB 分布式使用。MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性
CSV 使用逗号分隔值格式将数据存储在文本文件中。存文本的。可以使用CSV引擎以CSV格式导入和导出其他软件和应用程序之间的数据交换
BLACKHOLE 黑洞存储引擎接受但不存储数据,检索总是返回一个空集。该功能可用于分布式数据库设计,数据自动复制,但不是本地存储
example “stub”引擎,它什么都不做。可以使用此引擎创建表,但不能将数据存储在其中或从中检索。目的是作为例子来说明如何开始编写新的存储引擎

管理存储引擎:

show engines;          查看支持的存储引擎
show variables like '%storage_engine%';      查看当前默认使用的
show table status from db_name;        当前所有表的存储引擎

show table status like  'tb_name';      查看指定表
show create table tb_name;          查看指定表
	 

设置表的存储引擎:

CREATE TABLE tb_name(字段... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;

设置默认的存储引擎:

vim /etc/my.cnf
[mysqld]
default_storage_engine= InnoDB
posted @ 2022-02-05 13:17  suyanhj  阅读(47)  评论(0)    收藏  举报