iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql引擎笔记整理
  • 132
分享到

mysql引擎笔记整理

2024-04-02 19:04:59 132人浏览 泡泡鱼
摘要

查看当前的Mysql数据库都支持什么样的存储引擎: mysql> show engines; ERROR 2006 (HY000): MySQL Server has Gone away No con

查看当前的Mysql数据库都支持什么样的存储引擎:
mysql> show engines;
ERROR 2006 (HY000): MySQL Server has Gone away
No connection. Trying to reconnect...
Connection id:    170700
Current database: *** NONE ***
mysql引擎笔记整理
注:
1、support的状态有default,yes,no,disabled。no表示该引擎不可用,disabled表示支持该引擎,但是当前被禁用。
2、Transactions表示是否支持事务
3、XA表示是否支持分布式事务。
4、Savepoints表示是否支持保存点。

mysql中自带的也比较常见的存储引擎有:MyISAM,Innodb,NDB Cluster,Memory,ArcHive,Merge,Federated等。其中,最著名和广泛的就是MyISAM,Innodb。

1) MEMORY引擎
MEMORY存储引擎的表只拥有一个独立的磁盘文件,扩展名为.frm,用来存储表结构的定义,不包含数据。
MEMORY引擎表的数据保存在内存中,mysql服务端需要单独为其分配内存区域。分配给它的内存在正常状态下不会释放,会一直被持有。除非整个MEMORY表被删除或重建才会释放相关内存。
如果仅删除MEMORY引擎表中的数据,释放的内存会被该表新插入的数据所使用,无法被其他对象或者线程使用。
当mysql服务关闭时,MEMORY引擎表中的数据都会丢失,表结构会予以保留。
MEMORY引擎表占用的最大内存由参数max_heap_table_size系统变量来决定。该值默认识16M。可以为不同的MEMORY引擎表设置不同的最大内存。但是mysql服务重启后,所有的MEMORY引擎表的最大内存又会被系统变量的值覆盖掉。
---------设置最大内存为1M;----------
set max_heap_table_size=1024*1024;
create tabele test1(user varchar(10)) engine=memory;
---------设置最大内存为2M;----------
set max_heap_table_size=1024*1024*2;
create tabele test1(user varchar(10)) engine=memory;
除此之外,还可以在创建MEMORY引擎表时指定max_rows项的值来限制MEMORY引擎表所使用的内存。

2)csv存储引擎
csv存储引擎是基于csv格式文件存储数据的。
csv存储引擎表的所有列必须强制指定NOT NULL,而且csv存储引擎表不支持索引,不支持分区。
csv存储引擎表包含一个表的结构定义文件,扩展名为.frm,以及一个扩展名为.CSV的数据文件,还有一个同名的元信息文件,扩展名为.CSM,用来保存表状态和表中保存的数据量。
.CSV的数据文件就是CSV格式的平面文本文件,可以用excel打开。
如果.CSV文件中的内容被损坏,可以用CHECK TABLE或者REPaiR TABLE命令来进行检查和恢复。
CHECK TABLE命令用于检查文件中的每一行是否合法,如果又发现不合法的行,就抛出异常。
REPAIR TABLE命令用来修复文件,将文件中损坏的数据清除掉。注意它会将出现损坏行之后的所有记录行都清掉,而不管后面的记录行是否有合法的数据。

3)ARCHIVE存储引擎
基于ARCHIVE存储引擎的对象,能够将大量数据压缩存储,它使用了zlib无损数据压缩算法,并且还可以使用OPTIMIZE TABLE分析表使其打包成更小的格式。
ARCHIVE存储引擎的特点就是插入效率高,数据保存时占空间小。
ARCHIVE存储引擎目前仅能支持insert和select语句,不支持update,delete,replace语句。支持order by操作,BLOB列等常规列,可以使用行级定,但不支持索引。
ARCHIVE存储引擎拥有.frm结构定义文件,以及扩展名为.arz的数据文件。在执行优化操作时可能还会出现一个扩展名为.arn的文件

4)BLACKHOLE引擎
BLACKHOLE引擎虽然可以像其他引擎一样接受数据,但是数据并不会保存。BLACKHOLE引擎表中永远为空。但是,该引擎表支持各种索引。
尽管BLACKHOLE引擎表中不存放任何数据,但是如果启用了binlog,那么执行的sql语句实际上是会被记录的。
BLACKHOLE引擎表只有一个.frm格式的文件,用于保存表定义。

5)MRG_MYISAM存储引擎
又称为MERGE存储引擎,它是将一组MyISAM表聚合在一起,使用时就像一张表一样,以此来简化查询操作。
MRG_MYISAM存储引擎表,要求基表拥有相同的列和索引信息,并且列的定义和顺序,索引的顺序都必须一模一样。否则是无法聚合到一起的。
MRG_MYISAM存储引擎表本身并不存储数据,只是一个汇总作用,但是它除了支持查询操作外,也支持插入,修改,删除操作。操作方式和普通的MyISAM表一样。
只是插入的时候,需要一些配置,以指明往哪张MyISAM表中插入数据。这个配置就是创建MRG_MYISAM存储引擎表时的INSERT_METHOD选项。
INSERT_METHOD选项有三个值,分别是NO,FIRST,LAST。NO表示不允许插入,是默认值。FIRST是插入第一张表。LAST是插入最后一张表。

6)FEDERATED存储引擎
类似于oracle中的database link。默认mysql安装时不安装FEDERATED存储引擎的,如果需要使用该引擎,在编译安装时,添加参数-DWITH_FEDERATED_STORAGE_ENGINE。并且在启动mysql服务时,
附加参数--FEDERATED。或者修改my.cnf配置文件,加上FEDERATED一行,重启mysql服务。
FEDERATED存储引擎表,只有表结构,其物理数据是来自于远端的mysql服务器。每个FEDERATED存储引擎表都包含了两个元素:一个远端的mysql数据库表,一个本地的数据库表。
FEDERATED存储引擎表在创建时,需要通过CONNECTION选项指定连接信息。CONNECTION选项有两种写法:一种通过字符串,一种是通过CREATE SERVER语句。通过CREATE SERVER语句创建的server信息都会被保存在mysql.servers表中。

7)MyISAM存储引擎
每个MyISAM表对象都是由3个独立的文件组成,扩展名分别是.frm,.MYD,.MYI。.frm文件用于存储表对象的结构,.MYD用于存储表数据,.MYI用于存储表的索引信息。
在MyISAM引擎表中,不管包含多少个CHAR/VARCHAR类型列,这些列的长度加起来也不能超过65535B,单表字符列最大长度不能超过65532B。
MyISAM引擎的主要优点是快,查询快,写入快。但是缺点也比较明显,不支持事务,锁粒度太粗(表级锁),在OLTP场景下不合适。
在存储数据时,MyISAM引擎表支持三种存储格式:FIXED(定长或称静态),DYNAMIC(动态),COMPRESSED(压缩)。
静态格式表就是表中不含变长度的列,比如varchar/varbinary/blob/text等,所定义的每一列保存的均是固定的字节数。或者创建时指定ROW_FORMAT=FIXED。优点:简单,查找数据最快,崩溃后最好恢复。缺点:费空间。
动态格式表就是和静态格式表相反的,或者创建时指定了ROW_FORMAT=DYNAMIC。除了字符串长度小于4的列以外,其他字符列的长度都是动态的。优点:省空间。缺点:查询相对较慢,存储空间碎片会比较多。崩溃后恢复操作比较麻烦。
(myisamchk工具:OPTIMIZE TABLE或者myisamchk -r命令用来消除碎片;myisamchk -ei用来查询表的统计信息;myisamchk -ed命令用来查询表对象的链接数。)
压缩格式表:创建只能用myisampack创建,解压缩用myisamchk命令。压缩表只能读,不能添加或修改记录。

8)InnoDB存储引擎
InnoDB拥有自己独立的缓存池,对应参数是innodb_buffer_pool_size系统变量,类似于oracle数据库中的SGA_TARGET,常用数据包括索引都在缓存中。
锁粒度为行级,提供一致性读。支持事务。支持外键约束。支持数据加密。支持查询、数据、索引缓存。支持备份/恢复到时间点。
InnoDB存储引擎表必须创建主键,一般选择将经常需要查询的列作为主键,如果没有合适的列,就将主键创造到自动增长的列。
InnoDB能够处理多会话并发读写同一个对象。
InnoDB有两种表空间方式:系统表空间和多重表空间。
InnoDB系统表空间对应哪些物理文件,是由系统变量innodb_data_file_path来设置的:
mysql> show variables like "%innodb_data%";
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| innodb_data_home_dir  |                        |
+-----------------------+------------------------+
2 rows in set (0.00 sec)
默认情况下,InnoDB数据文件时是存放在mysql的data目录中,如果想变更目录,可以通过系统变量innodb_data_home_dir来设置。
启动innodb_file_per_table选项,以启用多重表空间,使表中数据和索引保存在单独的文件中,而不是保存在系统表空间中。
设置为多重表空间时,truncate存储引擎为InnoDB的表速度很快,并且释放的空间能够被操作系统使用。
mysql5.6中,innodb_file_per_table选项默认是为启动的。
mysql> show variables like "%innodb_file%";
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| innodb_file_format       | Antelope |
| innodb_file_format_check | ON       |
| innodb_file_format_max   | Antelope |
| innodb_file_per_table    | ON       |
+--------------------------+----------+
4 rows in set (0.00 sec)

InnoDB除了有表空间概念,还有自己专用的日志文件,即REDOLOG日志。
默认情况下,InnoDB引擎会创建两组大小均为5M的日志文件,分别名为ib_logfile0和ib_logfile1。
关于InnoDB引擎日志的系统参数有以下几个:innodb_log_group_home_dir redo log的保存路径,默认是在datadir变量指定的路径下
    innodb_log_file_size  每一个redo日志的大小,最大不能超过512G
    innodb_log_files_in_group  指定日志文件组的数量,默认是两个,最多不超过100个
调整InnoDB引擎日志比较复杂,因为这几个参数均是静态参数,并且调整它们还要依赖参数innodb_fast_shutdown。                                     
innodb_fast_shutdown参数用来控制InnoDB的关闭模式,有三个值:
    0  0模式类似于oracle的shutdown normal
    1  1模式类似于oracle的shutdown immediate,默认值是1
    2  2模式类似于oracle的shutdown abort
InnoDB引擎因为支持事务,所以一定会需要回滚段。关于InnoDB引擎的回滚段,有以下两个参数:innodb_undo_directory  指定UNDO日志的物理文件位置
     innodb_undo_tablespaces  指定UNDO表空间的数量,每个undo表空间都是独立的.idb文件
     innodb_undo_logs   指定undo表空间中回滚段的数量
undo表空间一旦创建,就无法删除。所以一旦使用了undo表空间,mysql的版本就无法从5.6降下去。 

默认情况下,连接到MYSQL服务的客户端处于自动提交模式,即每条DML执行即提交。
如何启动InnoDB引擎的事务支持?有两种方式:
1、禁用事务的自动提交:
将autocommit系统变量置为0或者OFF。以后就由用户来决定是否提交或者回滚事务。
autocommit是会话级变量,只针对当前会话,无法全局生效。
mysql> show variables like "%autocommit%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)
2、显式声明事务,通过语句start transaction语句。

mysql库中的表默认均为MYISAM引擎表,不可以更改引擎。
对于InnoDB引擎表而言,用show table status返回表的记录行数,行长度等状态信息并不精确,只是一个估算值。最好用count函数来进行统计。


InnoDB引擎表的逻辑存储结构从小到大分为页(pages)/块,扩展(extend)/区,段(segments),表空间。
页(pages)/块: 基本单位,默认大小为16K,可以通过参数innodb_page_size变量设置,可选值有4k,8k,16k
扩展(extend)/区:每个区固定1M大小,区由页构成。
段(segments):InnoDB中,段实际上指的是独立表空间对应的数据文件。
表空间:
 
InnoDB引擎内部在保存数据到数据库时,会自动生成3个内部列:DB_TRX_IDG标记事务的标识符,DB_ROLL_PRT为回滚标记,DB_ROW_ID为行ID
回滚段中的UNDO日志分为insert UNDO日志和update UNDO日志。
insert UNDO日志:仅在事务回滚时需要,事务提交后即被废弃
update UNDO日志:用于构造一致性读。
回滚段中的UNDO日志记录大小,一般会小于实际插入或者修改的记录大小。

purge线程:delete记录时,记录并不会立即在物理上被删除,只有当InnoDB废弃update UNDO日志后,才会从物理上移除关联的列和索引记录,这种移除操作称之为purge。
控制purge线程延迟可以用过系统变量innodb_max_purge_lag进行设置。
您可能感兴趣的文档:

--结束END--

本文标题: mysql引擎笔记整理

本文链接: https://www.lsjlt.com/news/45325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述
    Flutter游戏引擎Flame系列笔记 1.Flame引擎概述 - 文章信息 - Author: 李俊才(jcLee95) Visit me at: https://jclee95....
    99+
    2023-09-08
    游戏引擎 Flame Flutter
  • PHP学习笔记:游戏开发与物理引擎
    摘要:随着互联网的发展,游戏开发变得越来越流行。PHP作为一种流行的服务器端编程语言,也可以用于游戏开发。本文将介绍如何使用PHP进行游戏开发,并结合物理引擎实现更加逼真的游戏效果。文章将着重介绍游戏物理引擎的概念和使用方式,并提供详细的代...
    99+
    2023-10-21
    PHP 游戏开发 物理引擎
  • 整理python笔记
    ...
    99+
    2023-01-31
    笔记 python
  • MySQL的知识点整理(学习笔记)
    目录 一、认识数据库 1. 什么是数据库 2. 数据库类型 3. 常见的数据库管理系统 4. MySQL介绍 5. MySQL的安装&管理工具的安装 6. SQL概述 7. 在DOS系统中操作MySQL 8. MySql常用命令 二、操作...
    99+
    2023-09-09
    mysql 数据库 学习 笔记
  • MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎详解
    Mysql逻辑架构介绍总体概览 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的...
    99+
    2024-04-02
  • MySQL存储引擎MyISAM与InnoDB区别总结整理
    1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎...
    99+
    2024-04-02
  • PHP学习笔记:搜索引擎与全文检索
    引言:搜索引擎和全文检索是现代Web开发中非常重要的功能。无论是电商网站、新闻门户还是博客网站,几乎所有的网站都需要提供快速准确的搜索功能,以便用户能够迅速找到所需要的信息。 在PHP中,我们可以借助一些强大的开源库来实现搜索引擎和全文检索...
    99+
    2023-10-21
    - PHP学习笔记 - 搜索引擎 - 全文检索
  • Python学习笔记整理(七)Pytho
    一、元组介绍 元组(tuple)是无法修改的其他对象的结合.元组由简单的对象构成,元组与列表类似,不过元组不能在原处修改。通常写成圆括号中的一系列项。 1、元组的属性 *任意对象的有序集合 与字符串和...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(五)Pytho
    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件。他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套。 一、列表 列表的主要属性: *任意对象的有序集合 ...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(八)Pytho
      程序由模块构成 模块包含语句 语句包含表达式 表达式建立并处理对象 一、Python语句 语句 角色 列子 赋值 创建引用 a,b,c='good','bad...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(四)Pytho
    字符串是一个有序的字符集合,用于存储和表现基于文本的信息。 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(六)Pytho
    一、字典介绍 字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 1、字...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(十)Pytho
    if语句是选取要执行的操作. 一、if语句 1、通用格式 形式是if测试,后面跟着一个或多个可选的elif(else if)测试,以及一个最终选用的else块。测试和else部分可以结合嵌套语句块,缩进列在行首...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记整理(二)pytho
    一、Python的数字类型 1、数字常量 python数字类型在程序中如何显示(换句话说,作为常量) 数字            常量 1234,-23,0        一般整数 9999...
    99+
    2023-01-31
    学习笔记 Python pytho
  • Python学习笔记整理(一)pytho
    Python对象类型 说明:python程序可以分解成模块,语句,表达式以及对象。 1)、程序由模块构成 2)、模块包含语句 3)、语句包含表达式 4)、表达式建立并处理对象 一、...
    99+
    2023-01-31
    学习笔记 Python pytho
  • JavaScript工作脚本笔记整理
    整理一篇工作中的JavaScript工作脚本笔记,学而三省吾身。(1) 获取Url绝对路径function getUrlRelativePath()    {      ...
    99+
    2023-06-03
  • Python学习笔记整理(九)Pytho
    赋值语句,表达式语句,打印 一、赋值语句 赋值语句给对象命名,基本形式是在等号左边写赋值语句的目标,右边写赋值的对象。左边可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象表达式 。 1、赋值...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • MySQL存储引擎怎么理解
    这篇文章主要讲解了“MySQL存储引擎怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL存储引擎怎么理解”吧!今天发现了一个神奇的参数:-si...
    99+
    2024-04-02
  • Python学习笔记整理(十二)Pyth
    一、函数基础 函数可以计算出一个返回值。作用:最大化代码重用,最小化代码冗余,流程的分解 1、函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege',...
    99+
    2023-01-31
    学习笔记 Python Pyth
  • Python学习笔记整理(十三)Pyth
    一、模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。 每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以...
    99+
    2023-01-31
    学习笔记 Python Pyth
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作