MySQL存储引擎和

 MySQL存储引擎

 在数据库中保存的是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,最关注的一个问题是使用什么存储引擎。MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的、不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体性能。例如,如果在研究大量的临时数据,也许需要使用内存类存储引擎。内存存储引擎能够在内存中存储相关数据。又或者,需要使用一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在 MySQL服务器中启用。选择适用于服务器、数据库和表格的存储引擎,可以在存储信息、检索数据时,提供最大的灵活性。
        关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel电子表格的形式。有的表简单、有的表复杂、有的表根本不用来存储任何长期数据、有的表读取时非常快,但是插入数据时却很差。在实际开发过程中,就可能需要各种各样的表,不同的表就意味着存储不同类型的数据,数据的处理上也会存在着差异。那么,对于MySQL来说,它提供了很多种类型的存储引擎(或者说不同的表类型),根据对数据处理的需求,可以选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。

        在MySQL客户端中,使用以下命令可以查看MySQL支持的引擎。

1、MyISAM 存储引擎

        MyISAM 存储引擎不支持事务,也不支持外键,特点是访问速度快,对事务完整性没有要求,以 SELECT、INSERT 为主的应用基本都可以使用这个引擎来创建表。

        每个MVISAM 表在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:

  • frm(存储表定义)
  • MYD(MYData,存储数据)
  • MYI(MYIndex,存储索引)

        数据文件和索引文件可以放置在不同的目录,平均分配10,获取更快的速度。要指定数据文件和索引文件的路径,需要在创建表的时候通过 DATA DIRECTORY 和 INDEXDIRECTORY 语句指定,文件路径需要使用绝对路径。

        每个 MyISAM 表都有一个标志,服务器或 myisamchk 程序在检査 MyISAM 数据表时会对这个标志进行设置。MyISAM 表还有一个标志用来表明该数据表在上次使用后是不是被正常的关闭了。如果服务器意外宕机或崩溃,这个标志可以用来判断数据表是否需要检查和修复。如果想让这种检查自动进行,可以在启动服务器时使用-myisam-recover 实现。这会让服务器在每次打开一个MyISAM数据表时自动检查数据表的标志并进行必要的修复处理。MVISAM 类型的表可能会损坏,可以使用 CHECK TABLE 语句来检查 MVISAM 表的健康,并用 REPAIR TABLE 语句修复一个损坏的 MyISAM 表。
        MyISAM 表还支持3种不同的存储格式:

  • 静态(固定长度)表
  • 动态表
  • 压缩表

        其中静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。静态表在数据存储时会根据列定义的宽度定义补足空格,但是在访问的时候并不会得到这些空格,这些空格在返回给应用之前已经去掉。同时需要注意:在某些情况下可能需要返回字段后的空格,而使用这种格式时后面的空格会被自动处理掉。
        动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 mvisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难。
        压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

2.InnoDB 存储引擎

        InnoDB 是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。MySQL 从5.5.5 版本开始,默认的存储引擎为InnoDB。InnoDB 存储引擎还引入了行级锁定和外键约束,在以下场景中使用 InnoDB 存储引擎是最理想的选择:

  • 更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
  • 事务:InnoDB 存储引擎是支持事务的标准 MySQL存储引擎。
  • 自动灾难恢复:与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
  • 外键约束:MySQL 支持外键的存储引擎只有InnoDB。
  • 支持自动增加列 AUTO INCREMENT 属性。

        一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB 是不错的选择而 MyISAM 和 InnoDB 两种存储引擎的区别主要表现在以下几个方面。

  • InnoDB 支持事务,MyISAM 不支持,这一点是非常重要的。事务是一种高级的处理方式,如对一些表中的列进行增删改的过程中只要哪个出错还可以回滚还原,而 MyISAM就不可以。
  • MVISAM 适合查询、插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用。
    InnoDB 支持外键,MyISAM 不支持。
  • 从 MySQL5.5.5 以后,InnoDB 是默认引擎。
  • MySQL 从 5.6 版本开始 InnoDB 引擎才支持 FULLTEXT 类型的索引。
  • InnoDB 中不保存表的行数,如 select count(*)from table 时,InnoDB 需要扫描一遍整
    个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count(*)语句包含 where 条件时 MyISAM 也需要扫描整个表。
  • 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引。
  • 清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表。
  • InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like'%lee%';

        3.关于 MyISAM 与InnoDB 选择使用

        MyISAM 和 InnoDB 是 MySQL 数据库提供的两种存储引擎。两者的优劣可谓是各有千秋。InnoDB 会支持一些关系数据库的高级功能,如事务功能和行级锁,MISAM 不支持。MVISAM 的性能更优,占用的存储空间少。所以,选择何种存储引警,视具体应用而定。

        (1)如果应用程序一定要使用事务,毫无疑问要选择InnoDB 引擎。但要注意,InnoDB的行级锁是有条件的。在 where 条件没有使用主键时,照样会锁全表。比如 DELETE FROMmytable 这样的删除语句。

        2)如果应用程序对查询性能要求较高,就要使用MyISAM 了。MyISAM 索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于 InnoDB。压缩后的索引也能节约一些磁盘空间。
        有人说 MyISAM 只能用于小型应用,其实这只是一种偏见。如果数据量比较大,这是需要通过升级架构来解决,比如分表分库,而不是单纯地依赖存储引擎

        4.修改默认的存储引擎
修改默认的存储引擎有四种方法,分别如下。

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

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

相关文章

LeetCode 144.二叉树的前序遍历 C写法

LeetCode 144.二叉树的前序遍历 思路🧐: 遍历很简单,但是我们需要开空间进行值的存储,结点个数也可以用递归进行统计,开好空间就可以用数组进行值的存储,注意下标要么用全局,要么指针解引用&…

Astro 实现TodoList网页应用案例

Astro 是一个现代化的静态站点生成器和前端框架,它具有独特的设计理念:岛屿架构。它允许开发人员使用组件化的方式构建内容优先的网站,将各种技术栈(如React、Vue、Svelte等)的组件无缝集成到同一个项目中。 1、创建项…

使用注意力机制的seq2seq

一、背景 1、机器翻译中,每个生成的词可能相关于源句子中不同的词,但是之前用的是最后一个RNN层出来的context。 2、加入注意力 (1)假设输入序列中有𝑇个词元, 解码时间步𝑡′的上下文变量是…

​LLM大模型从入门到精通(7)--企业大模型开发流程​

一、大模型项目开发的两种方式 2023年以来,随着ChatGPT的火爆,使得LLM成为研究和应用的热点,但是市面上大部分LLM都存在一个共同的问题:模型都是基于过去的经验数据进行训练完成,无法获取最新的知识,以及各…

最新Python编程、机器学习与深度学习应用

近年来,人工智能领域的飞速发展极大地改变了各个行业的面貌。当前最新的技术动态,如大型语言模型和深度学习技术的发展,展示了深度学习和机器学习技术的强大潜力,成为推动创新和提升竞争力的关键。特别是PyTorch,凭借其…

昇思25天学习打卡营第26天|munger85

ShuffleNet图像分类 和mobilenet一样,也是在资源有限的设备上进行神经网络来做ai图像分类的小模型,在保持精度的同时大大降低了模型的计算量。 是基本块 就是真正的网络,如果模型size是2,就是输出的时候多一些,精细一…

jdk版本管理利器-sdkman

1.什么是sdkman? sdkman是一个轻量级、支持多平台的开源开发工具管理器,可以通过它安装任意主流发行版本(例如OpenJDK、Kona、GraalVM等等)的任意版本的JDK。通过下面的命令可以轻易安装sdkman: 2.安装 curl -s "https://…

安装 moleculeSTM 踩坑日记

“学习 LLM ,在大模型时代为自己存张船票”。 相信很多人都有这样的想法。那么,在 AI for science 领域,哪些 LLM 模型值得一试呢? 笔者认为: LLM 直接预测 SMILES 性质 or 直接生成 SMILES 的技术路线是行不通的。因…

系统移植(十)Linux内核源码解析(未整理)

1、分析make <board_name>_defconfig执行过程详解 分析Makefile文件&#xff0c;分析Makefile文件的规则中目标为"<board_name>_defconfig", 打开linux内核源码目录下的Makefile,搜索“%config”字符串&#xff0c;得到以下结果 %config: scripts_basic …

进程间通信--套接字socket

前面提到的管道、消息队列、共享内存、信号和信号量都是在同一台主机上进行进程间通信&#xff0c;那要想跨网络与不同主机上的进程之间通信&#xff0c;就需要Socket通信了。 实际上&#xff0c;Socket通信不仅可以跨网络与不同主机的进程间通信&#xff0c;还可以在同主机上…

安防监控视频平台LntonAIServer视频监控管理平台裸土检测算法

LntonAIServer裸土检测算法代表了一种先进的土地监测技术&#xff0c;它利用人工智能的强劲能力&#xff0c;实现了对裸土区域的自动识别和实时监测。该算法的推出&#xff0c;为环境保护、农业管理以及城市规划等多个领域提供了创新的解决方案&#xff0c;其应用前景广阔&…

maven插件1(timer-plugin)

概述 timer plugin, 提供4个goal: currentTimecurrentDatecurrentMonthcurrentYear 打包 命令 maven clean install 常见错误 goalPrefix MISSING 错误信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.13.1:helpmojo (help-goal)…

速通JS模块化规范

目录 1模块化概述 1.1什么是模块化&#xff1f; 1.2为什么需要模块化&#xff1f; 2有哪些模块化规范&#xff1f; 3导入与导出的概念 4CommonJS 规范 4.1初步体验 4.2导出数据 4.3导入数据 4.4扩展理解 4.5浏览器端运行 5ES6 模块化规范 5.1初步体验 5.2Node 中运…

创建自己的 Omnigraph (python篇)

Omnigraph 是 Nvidia Omniverse 中一个强大的视觉化脚本工具&#xff0c;它让开发者能够以直观和灵活的方式创建复杂的行为和交互性。通过结合 Action Graphs 和 Push Graphs&#xff0c;以及利用丰富的节点库&#xff0c;用户可以在 Omniverse 平台上构建出令人惊叹的虚拟世界…

【书生大模型实战】L1-LangGPT结构化提示词编写实践

一、关卡任务 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用LangGPT优化提示词&#x…

【爱创大师】【数学】一元一次方程的实现

科技 教育 艺术 跨界融合&#xff0c;欢迎来到爱创大师 问题引入&#xff1a; 同学们还记得啥是一元一次方程吗&#xff0c;来回顾一下定义 一元一次方程指只含有一个未知数、未知数的最高次数为1且两边都为整式的等式。一元一次方程只有一个根。一元一次方程可以解决绝大多…

【2024最新】国内6个免费的AI绘画网站,支持Midjourney等绘画模型

一、什么是AI绘画&#xff1f; AI绘画&#xff0c;也称为人工智能绘画或机器生成艺术&#xff0c;是指使用人工智能技术来创作视觉艺术作品的过程。这种技术通常涉及到深度学习模型&#xff0c;尤其是生成对抗网络&#xff08;GANs&#xff09;和变分自编码器&#xff08;VAEs…

3d动画软件blender如何汉化?(最新版本4.2)

前言 Blender是一个非常强大的3d动画软件&#xff0c;总能受到大量工作者的青睐。 但是&#xff0c;对于新手来说&#xff08;尤其是英语学渣&#xff09;&#xff0c;语言是个难事。大部分blender打开时都是英文&#xff0c;对新手使用具有一定的障碍。因此&#xff0c;我们需…

向量数据库(二):Qdrant

写在前面 我们借助 Qdrant 来了解向量数据库的一些内容 内容 什么是 Qdrant? Qdrant 是一个开源的针对向量相似性搜索的引擎,它提供了一系列的 API 用于对向量数据进行存储、搜索和管理等功能。 下面是来自 Qdrant 官网的一个架构图: 初步了解 Qdrant 里的一些概念 …

【Qt】QComboBox和QListWidget样式调整问题

总是遇到一些重复的问题&#xff0c;隔得时间长了&#xff0c;就又忘记了&#xff0c;记录一下。 问题1&#xff1a; QComboBox下拉条目高度设置不生效的问题&#xff0c;在样式中设置了item的高度&#xff0c;但是不生效。 解决办法&#xff1a; 创建QCoboBox的时候&#…