第二十三章:存储引擎

news2024/11/25 18:43:04

第二十三章:存储引擎

​ 为了管理方便,人们把连接管理查询缓存、语法解析、查询优化这些并不设计真实数据存储的功能划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能。所以在MySQL server完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就好了。

23.1:查看存储引擎

  1. 查看MySQL提供了什么存储存储引擎

    show engines;
    

    在这里插入图片描述

    • Engine参数:表示存储引擎名称。
    • Support参数:表示MySQL数据库管理系统是否支持该存储引擎。【YES表示支持,NO表示不支持】
    • DEFAULT参数:表示系统默认支持的存储引擎。
    • Comment参数:表示对存储引擎的评论。
    • Transactions参数:表示存储引擎是否支持事物。【YES表示支持,NO表示不支持】
    • XA参数:表示存储引擎所支持的分布式是否符合XA规范。【YES表示支持,NO表示不支持】代表着该存储引擎是否支持分布式事物。
    • Savepoints参数:表示存储引擎是否支持事物处理的保存点。【YES表示支持,NO表示不支持】该存储引擎是否支持部分事物回滚。

23.2:设置系统默认的存储引擎

  1. 查看默认的存储引擎

    show variables like '%storage_engine%';
    SELECT @@default_storage_engine;
    
  2. 修改默认的存储引擎

    ​ 如果在创建表的语句中没有显示指定表的存储引擎的话,那就会默认使用InnoDB作为表的存储引擎。如果我们想改变表的默认存储引擎的话。

    # 修改默认存储引擎
    SET DEFAULT_STORAGE_ENGINE=存储引擎名称;
    
    # 在my.cnf文件中修改默认存储引擎
    default-storage-engine=存储引擎名称
    

23.3:设置表的存储引擎

​ 存储引擎是负责对表中的数据进行提取和写入工作的,我们可以为不同的表设置不同的存储引擎,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。

  1. 创建表时指定存储引擎

    之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎InnoDB。如果想显示的指定一下表的存储引擎。

    CREATE TABLE 表名(
    	建表语句;
    )ENGINE=存储引擎名称;
    
  2. 修改表的存储引擎

    如果表已经建好了,我们也可以使用下边这个语句来修改表的存储引擎:

    ALTER TABLE 表名 ENGINE = 存储引擎名称;
    

23.4:引擎介绍

  1. InnoDB:具备外键支持功能的事物存储引擎

    • MySQL3.23.34a开始就包含InnoDB存储引擎。大于等于5.5之后,默认采用InnoDB引擎

    • InnoDBMySQL默认事物型引擎,它被设计用来处理大量的短期(short-lived)事物。可以确保事物的完整提交(Commit)和回滚(Rollback)。

    • 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。

    • InnoDB为处理巨大数据量的最大性能设计。行锁,操作时只锁某一行,不对其他有影响,适合高并发的操作。

    • 对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。

    • MyISAM只缓存索引,不缓存真实数据,InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。

  2. MyISAM:主要的非事物处理存储引擎

    • MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事物行级锁外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复

    • 5.5之前默认的存储引擎。

    • 优势是访问的速度快,对事物完整性没有要求或者以SELECTINSERT为主的应用。

    • 针对数据统计有额外的常数存储。故而count(*)的查询效率跟高。

    • 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作。

  3. Archive:用于数据存档

    • archive是归档的意思,仅仅支持插入和查询两种功能(行被插入后不能再修改)。
    • MySQL 5.5以后支持索引功能。
    • 拥有很多的压缩机制,使用zlib压缩库,在记录请求的时候实时的进行压缩,经常被用来作为仓库使用。
    • 创建ARCHIVE表示,存储引擎会创建名称以表名开头的文件。数据文件的扩展名为.ARZ
    • 根据英文的测试结论来看,同样数据量下,Archive表比MyISAM表要小大约75%,比支持事物处理的InnoDB表小大约83%
    • ARCHIVE存储引擎采用了行级锁。该ARCHIVE引擎支持AUTO_INCREMENT列属性。AUTO_INCRMENT列可以具有唯一索引或非唯一索引。尝试在任何其他列上创建索引会导致错误。
    • Archive表适合日志和数据采集(档案)类应用;适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度,但是对查询的支持较差。
    特征支持
    B树索引不支持
    备份/时间点恢复(在服务器中实现,而不是在存储引擎中)支持
    集群数据库支持不支持
    聚集索引不支持
    压缩数据支持
    数据缓存不支持
    加密数据(加密功能在服务器中实现)支持
    外键支持不支持
    全文检索索引不支持
    地理空间数据类型支持支持
    地理空间索引支持不支持
    哈希索引不支持
    索引缓存不支持
    锁粒度行锁
    MVCC不支持
    存储限制没有任何限制
    交易不支持
    更新数据字典的统计信息支持
  4. Blackhole:丢弃写操作,读操作返回空内容

    • Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存。
    • 但服务器会记录Blackhole表的日志,所以可以用于复制数据到备库,或者简单地记录到日志。但这种应用方式会碰到很多问题,因此并不推荐。
  5. CSV:存储数据时,以逗号分隔各个数据项

    • CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。
    • CSV引擎可以作为一种数据交换的机制,非常有用。
    • CSV存储的数据直接可以在操作系统里,用文本编辑器,或者excel读取。
    • 对于数据的快速导入、导出是有明显优势的。

    ​ 创建CSV表时,服务器会创建一个纯文本数据文件,其名称以表名开头并带有.csv扩展名。当你将数据存储到表中时,存储引擎将其以逗号分隔值格式保存到数据文件中。

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

  6. Memory:置于内存的表

    • 概述

      Memory采用的逻辑介质是内存,相应速度很快,但是当mysqld守护进程崩溃的时候数据会丢失。另外,要求存储的数据是数据长度不变的格式。

    • 主要特征

      1. Memory同时支持哈希(HASH)索引【默认】和**B+数索引**。
      2. Memory表至少比MyISAM表要快一个数量级
      3. MEMORY表的大小是受限制的。表的大小主要取决于两个参数,分别是max_rows【创建表示指定】和max_heap_table_size【大小默认为16MB,可以按需要进行扩大】。
      4. 数据文件与索引文件分开存储【表结构存储在frm类型文件,数据存储在内存】。
      5. 其数据易丢失,生命周期短。基于这个缺陷,选择MEMORY存储引擎时需要特别小心。
    • 使用Memory存储引擎的场景

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

    • Federated引擎是访问其他MySQL服务器的一个代理,尽管该引擎看起来提供了一种很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的
  8. Merge:管理多个MyISAM表构成的表集合

  9. NDBMySQL集群专用存储引擎

    • 也叫做NDB Cluster存储引擎,主要用于**MySQL Cluster分布式集群**环境,类似于OracleRAC集群。
  10. 引擎对比

    MySQL中同一个数据,不同的表可以选择不同的存储引擎。如下表对常用存储引擎做出了对比。

    特点MyISAMInnoDBMEMORYMERGENDB
    存储限制64TB没有
    事物安全支持
    锁机制表锁行锁表锁表锁行锁
    B数索引支持支持支持支持支持
    哈希索引支持支持
    全文索引支持
    集群索引支持
    数据缓存支持支持支持
    索引缓存只缓存索引,不缓存数据索引数据都缓存支持支持支持
    数据可压缩支持
    空间使用N/A
    内存使用中等
    批量插入的速度
    支持外键支持

23.5:MyISAM和InnoDB

MyISAMInnoDB是互相结合使用的,并不是替代关系。

​ 首先对于InnoDB存储引擎,提供了良好的事物管理、崩溃修复能力和并发控制。因为InnoDB存储引擎支持事物,所以对于要求事物完整性的场合需要选择InnoDB,缺点是其读写效率稍差,占用的数据空间相对较大。

​ 其次对于MyISAM存储引擎,如果是小型应用,系统以读操作和插入操作为主,只有很少的更新、删除操作,并且对事物的要求没有那么高,则可以选择这个存储引擎。MyISAM存储引擎的优势在于占用空间小,处理速度快;缺点是不支持事物的完整性和并发性。

对比项MyISAMInnoDB
外键不支持支持
事物不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行锁,操作时只锁某一行,不对其他有影响,适合高并发的操作
缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
自带系统表使用YN
关注点性能:节省资源、消耗少、简单业务事物:并发写、事物、更大资源
默认安装YY
默认使用NY

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各种好看的css效果收集

CSS动画特效-多种方案实现CSS光束扫过,扫光特效,ae文字过光效果,光效移动效果 一个集合180种免费的线性渐变网站,可在任何网站使用您不仅可以复制渐变的原生CSS颜色代码,还可以查看下载每个优质的渐变图片。 链接&…

多线程——python进阶知识

多线程与多进程的区别 多线程是单个内核通过锁的手段实现同一时间运行多个程序,在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果,需要借助锁、队列等保证进程的同步。 多进程是多个内核执行多个…

(赠书活动第4期)编译语言的思考过程

面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用于编程领域的编程范式,对于前端和后端开发都具有重要意义。在这篇说明中,我们将探讨面向对象编程对于前端和后端开发的重要性,并探讨其优…

【Linux指令集】---mv指令(超详细)

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 演示环境&#xff1…

高效工作:ADManager Plus的利器

在当今快节奏的商业环境中,高效的工作是成功的关键。对于IT管理员来说,管理和维护Active Directory(AD)环境是一项重要的任务。然而,手动处理繁琐的AD管理任务可能会占用大量的时间和精力,影响工作效率。为…

可使用Linux 测试IP和端口是否能访问,查看返回状态码

一、 使用wget判断 wget是linux下的下载工具,需要先安装. 用法: wget ip:port wget ip:port连接存在的端口 二、使用telnet判断 telnet是windows标准服务,可以直接用;如果是linux机器,需要安装telnet. 用法: telnet ip port…

【Elasticsearch】RestAPI

目录 4.RestAPI 4.0.导入Demo工程 4.0.1.导入数据 4.0.2.导入项目 4.0.3.mapping映射分析 4.0.4.初始化RestClient 4.1.创建索引库 4.1.1.代码解读 4.1.2.完整示例 4.2.删除索引库 4.3.判断索引库是否存在 4.4.总结 4.RestAPI ES官方提供了各种不同语言的客户端&…

基于vscode的ros开发

Part1前言 ROS(机器人操作系统)是一个开源的机器人软件平台,旨在提供一套通用的工具和库,帮助开发人员创建机器人应用程序。ROS提供了用于构建机器人系统的库、工具、驱动程序、通信协议和软件包管理系统。 以下是ROS的一些主要特…

第二十章:MySQL的数据目录

第二十章:MySQL的数据目录 20.1:MySQL8的主要目录结构 安装好mysql后,可以使用如下命令查看含有相关mysql的文件。 find / -name mysql # 数据库文件的存放路径 # /var/lib/mysql# mysql数据库文件 # /var/lib/mysql/mysql # /etc/logrota…

解决Material UI引入button按钮后英文字符被自动转化成全大写

目录 前言一、解决方法总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 环境&#xff1a; angularjs 1.4.3 material ui 1.1.4 问题描述 在引入<button>按钮的时候&#xff0c;带入了material 的按钮样式&#xff0c;导致了问题&#xff…

【Linux】- 常用指令和运行级别

运行级别 1.1&#x1f69e;指定运行级别1.2&#x1f68a;帮助指令1.3&#x1f694;文件目录类指令2.1 **ls 指令**2.2 **cd 指令**2.3 **mkdir 指令**2.4 **rmdir 指令**3.1 **touch 指令**3.2 **cp 指令**3.3 **rm 指令**3.4 **mv 指令**4.1 **cat 指令**4.2 **more 指令**4.3…

[QT编程系列-2]:C++图形用户界面编程,QT框架快速入门培训 - 1- 预备知识

目录 概述 1. 前置条件 1.1 C 1.2 图形界面 1.3 图形程序集成开发环境 1.4 图形程序开发框架 1.5 跨平台特性 1.6 QT快速感知 1.6.1 QT的典型应用 1.6.2 QT的特点 1.6.3 QT跨平台集成开发环境 1.6.4 QT是一种UI开发框架 1.6.5 QT的主要函数库 概述 1. 前置条件 学习…

解析三防平板在工业自动化的应用价值

三防平板作为一种具有出色性能和特殊设计的电子设备&#xff0c;为工业自动化领域带来了巨大的应用价值。采用英特尔凌动四核处理器&#xff0c;三防平板具备先进的技术与处理能力。同时配备Window 10操作系统&#xff0c;这款三防平板能够轻松执行多种任务指令。此外&#xff…

高数笔记3(第一章函数 极限 连续-极限的计算1)

目录 三、极限的计算概括&#xff08;1&#xff09;利用四则运算法则求极限常用的结论&#xff08;***&#xff09;未定式的分类以及做法&#xff08;***&#xff09;**例33 &#xff08;93 数三&#xff09;注意负无穷** &#xff08;2&#xff09;利用两个重要极限求极限&…

springboot结合疫情情况的婚恋系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

DataFrame.pivot()--Pandas

1. 函数功能 通过指定的行、列重塑数据&#xff0c;进行行列转换 2. 函数语法 DataFrame.pivot(*, columns, indextyping.Literal[<no_default>], valuestyping.Literal[<no_default>])3. 函数参数 参数含义columns用于分组的列名&#xff0c;出现在透视表的列…

插入排序法解析

插入排序法解析 什么是插入排序法 插入排序法是一种简单但有效的排序算法&#xff0c;其基本思想是将一个待排序的元素逐个插入到已经排好序的元素序列中&#xff0c;直至所有元素都被插入完成&#xff0c;从而得到一个有序序列。 具体步骤如下&#xff1a; 假设初始时&…

EasyCVR开启强制重置密码后页面显示异常的问题优化

EasyCVR基于云边端协同架构&#xff0c;可支持多协议、多类型的海量设备接入与分发&#xff0c;平台既具备传统安防视频监控的能力&#xff0c;也具备接入AI智能分析的能力&#xff0c;在线下均有大量应用。 近期我们对EasyCVR平台的安全性进行了技术升级&#xff0c;平台将默认…

Linux:rsync

一款快速增量备份工具【Remote Sync&#xff0c;远程同步】 远程灾难备份功能 *支持本地复制&#xff0c;或者与其他SSH、rsync主机同步 配置rsync源服务器【rsync同步源】 *指备份操作的远程服务器&#xff0c;也称为备份源 web服务器本地有服务器&#xff0c;IDC机房有备…

postman每次请求前获取token并保存到环境变量

文章目录 创建一个tab&#xff0c;写上接口地址&#xff0c;json类型的参数&#xff0c;点击send&#xff0c;返回成功。 点击Environment&#xff0c;新建dev环境&#xff0c;创建token变量 编写Tests脚本 // 获取响应的token值 var responseJson pm.response?.json()…