MYSQL存储引擎InnoDB, MyISAM简介

news2024/11/15 17:57:26

MYSQL存储引擎

在开始谈到mysql存储引擎之前,我们应该知道或者了解存储引擎是什么,存储引擎是为了解决什么样的问题的。

        在mysql中,存储引擎是处理不同表类型SQL操作的MySQL组件,同时MySQL服务器采用可插拔的存储引擎架构,在服务器运行时不需要重启就可以加载和卸载。

那我们为何要使用存储引擎呢?

        在MySQL对数据进行处理的过程中,我们肯定需要数据进行不同的操作,比如排序, 查找,等等,所以在操作的过程中如何存储数据,也就是该采用什么样的数据结构,以及如何保证数据读写的安全和速度等等,因此我们在不同的数据处理的情况下,就会用到不同的存储引擎。

存储引擎的分类

mysql中不同版本支持的存储引擎肯定是不相同的,这里我们可以使用指令 show engines来查看当前服务器所支持的存储引擎。

show engines;

       

其中YES表示为支持,NO表示为不支持,Default当然就表示为默认了,可以看到InnoDB是Mysql默认使用也是用途最广的存储引擎,后面一篇文章会专门提到。 (MYSQL 5.5开始成为的)

当然如果InnoDB引擎不是默认的存储引擎,可以通过命令行指定选项

default-storage-engine=InnoDB;

或者在MySQL的配置文件中配置上述选项

当然也会存在在一些业务场景下,默认存储引擎不是InnoDB且不能修改的情况这里我们在建表语句后面加上engine=InnoDB就行了

create table name{
    ......
}engine=InnoDB;

本文大概讲述一下每个存储引擎的优势,后面关于InnoDB引擎的每个特点后面会写文章详细讲述

InnoDB存储引擎

InnoDB存储引擎是一款高可靠性和高性能的存储引擎,如果建表的时候没有指定存储引擎,也会默认使用InnoDB引擎。 他的一些优势

  • 他是遵循ACID模型的,也就是支持事务功能,事务呢又是可以回滚,提交,崩溃恢复等来保护用户数据的安全性
  • 如果发生了意外导致服务器挂掉了,无论当时数据库发生了什么,都不需要在重启数据库后执行任何的特殊操作,InnoDB引擎崩溃修复功能会自动完成崩溃之前提交的更改,并撤销崩溃前正在进行但未提交的更改,从而允许我们从中断的地方继续执行。后面都会有专题详细讲述
  • 支持行级锁,提高了多用户的读取并发性和性能。这里的行级指的是锁的力度,后面都会详细讲到的
  • InnoDB引擎维护了一个自己的缓冲池,缓冲池是一个键值对结构的形式,以SQL语句作为Key,SQL语句的执行结果作为VALUE,对于经常执行的SQL语句,同时执行出来的结果都是相同的SQL语句,缓冲池会对这样的数据进行缓存,这样从硬盘操作的数据直接变成了从内存中操作,大幅提升了效率,在专用数据库服务器上,通常80%以上的物理内存会分配给缓存池
  • InnoDB引擎优化了关于主键的查询效率,每一个InnoDB表都有一个称为聚簇索引的主键索引实现通过最少的硬盘I/O来实现对主键的查找, 后面应该出单独讲一个索引的专题
  • 为了保持数据完整性,InnoDB引擎支持Foreign Key(外键约束),在进行CRUD的时候(增删改查)的时候确保了先关表之间的一致性。
  • 当从表中反复查询相同行时,自适应哈希索引会自动接管这些查询,此时查询效率和哈希表相同,InnoDB引擎本身不支持哈希索引,但是里面设计了一个自适应哈希,后面应该也会讲到

MyISAM存储引擎

MySQL5.5之前的默认存储引擎

既然可以作为之前的默认引擎,说明肯定还是有很多优点的,他的查询效率极高,底层也是b+树,同时他有自身数据压缩的功能,表的占用空间就非常的小。但是他锁的级别是一个表级锁,也就表明了 读/写的性能其实是不那么优秀的,通常运用于中小型web应用和数据仓库配置中的只读或者主要是读的场景

       下面是MyISAM中的一些优势

  • MyISAM表的最大行数为(2^32)^2及(1.844E + 19)行
  • MyISA引擎中每个表最多可以创建64个索引,每个索引最多可以包含16个列; 一般只会设置一点,因为设置索引后,更改数据会修改很多地方
  • 支持并发插入在建表时可以输入指令,将数据文件和索引文件放在不同设备的不同目录中,从而提高访问速度,创建MyISAM文件时会生成三个文件,一个是索引文件,一个是数据文件
  • BLOB和TEXT数据类型的列也可以被索引
  • 在索引列中允许使用NULL值
  • 在MySQL启动时设置了myisam_recover_options系统变量,那么MyISAM表在打开时会进行自查,如果上一次表没有正确关闭将会修复
  • 表中varchar和char列的长度总和最多可答64kb
  • unique约束的长度不受限制

MyISAM引擎存储格式

       在MyISAM引擎中支持三种不同的存储格式,其中FIXED 静态(固定)格式和DYNAMIC 动态格式,会根据使用的列类型来自动选择,第三种是压缩格式,只能使用myisampack 实用程序生成并且是只读格式,解压使用myisam工具进行解压

       当表中没有BLOB或TEXT数据类型的时候,在使用建表语句或者修改表语句的时候,可以结合ROW_FORMAT表选项将表格式设置为FIXED或者DYNAMIC

        我们可以使用myisam实用工具对已压缩的MyISAM进行解压操作

这里的压缩格式了解一下就好了 可以去百度搜一搜或者读一读官方文档

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

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

相关文章

关于Qt部署CMake导致“Failed to set working directory to”的问题

2024年7月23日补充:该目录过深的情况只在Win10上有发现,Win11则没有问题,且Win11可以在DevHome中设置LongPath。 --------------------------------------------------------------------------------------------------------------- 使用qt…

ABAP+从SAP发出去的PDF文件在第三方系统出现乱码

这是一个 ABAP转换PDF调用函数CALL FUNCTION CONVERT_OTF的问题记录,关乎字体STSong-Light-ldentity-H 和 STSong-Light的区别 背景: 做了一个增强,是采购订单审批后自动发送采购订单PDF1到企业微信,用户再将企业微信收到的P…

【独立站运营经验分享】独立站8大运营模式怎么选?

跨境独立站模式众多,你了解多少呢?今天,带你充分了解各种模式优劣对比,从知道适合做什么样的独立站。 1、铺货模式 指不局限于单一品类,广泛、批量地上架市场反响好的商品模式,以大量的SKU和较低的价格为特…

基于 Electron+Vite+Vue3+Sass 框架搭建

技术参考 技术描述Electron一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入 Chromium 和 Node.jsElectron Forge用于打包和分发 Electron 应用程序的一体化工具。英文地址在此Vite前端构建工具Vue3用于构建用户界面的 JavaScript 框架vitejs/plugin-vueVite 插…

鸿蒙OS物联网创新应用实训解决方案

摘要: 随着物联网技术的飞速发展,各种智能设备和传感器正在以前所未有的速度融入我们的日常生活。华为推出的鸿蒙操作系统(HarmonyOS)作为一款面向全场景、多设备、无缝连接的分布式操作系统,为物联网领域带来了全新的…

pdf文件压缩的有效方法,详解5个效果高效的文件压缩方法汇总!

在现代信息社会中,PDF 文件已经成为我们日常工作和学习中不可或缺的重要载体。然而,随着 PDF 文件内容的增多和复杂化,文件大小的膨胀也成为一个常见问题,给存储、共享和传输带来了不少挑战。本文旨在探讨如何通过有效的压缩方法来…

VScode 修改 Markdown Preview Enhanced 字体以及大纲编号

修改字体和背景颜色 按快捷键 Ctrl , 打开设置,搜索 markdown-preview-enhanced.previewTheme,选择一个黑色主题的css,如 github-dark.css. 修改自动编号和背景颜色 背景颜色 按 F1 或者 Ctrl Shift P,输入 Customize CSS…

WEB 手柄 http通信,mcu端解析代码 2024/7/23 日志

WEB 手柄 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>WEB遥控器</title> </head> &l…

【Linux】条件变量及生产者消费者模型

为什么要将这两者放在一起进行呢&#xff1f; 主要是因为生产消费与条件变量关系密切&#xff0c;正好相辅相成。 目录 条件变量&#xff1a;条件变量的引出&#xff1a;条件变量的解释与接口&#xff1a;测试代码&#xff1a; 生产者消费者模型&#xff1a;概念&#xff1a;代…

Window版本nginx修改文件访问句柄数被限制,解决大并发量访问时无法响应问题

目录 一、问题背景 二、问题分析 三、解决办法 四、查看nginx连接状态 一、问题背景 Windows版本因为文件访问句柄数被限制为1024了&#xff0c;当大并发量访问时就会无法响应。会有如下错误提示&#xff1a;maximum number of descriptors supported by select() is 1024…

强化学习学习(二)基于价值函数就能做到RL——Q-Learning Q学习

文章目录 Value funtion methods-为什么我们用回了Q函数&#xff1f;Q-iterationQ-Learning (P30) Value funtion methods-为什么我们用回了Q函数&#xff1f; 先回顾一下在AC中的基于V函数的框架&#xff1a; 另一个想法&#xff1a;不依赖梯度&#xff0c;而是直接根据值函…

vue3+vite 实现动态引入某个文件夹下的组件 - glob-import的使用

<template><div class"user-content"><HeaderTitle title"用户详情"></HeaderTitle><div class"main-content"><div><UserForm /></div><div><TableList></TableList></d…

pytest实战技巧之参数化应用

pytest是Python中最流行的测试框架之一。它提供了丰富的功能&#xff0c;可以帮助我们编写高效、可靠的测试用例。其中一个重要的功能就是参数化&#xff0c;它可以让我们用不同的数据组合来运行同一个测试用例&#xff0c;从而 提高测试覆盖率和效率。本文将介绍pytest参数化的…

python之名称空间和作用域(关键字:global和nonlocal的使用)

文章目录 前言1、名称空间和作用域1.1 引言1.2 名称空间1.2.1 内置名称空间1.2.2 全局名称空间1.2.3 局部名称空间1.2.4 名称空间的产生和销毁顺序 1.3 作用域1.3.1 全局作用域1.3.2 局部作用域1.3.3 名字的查找顺序 1.4 关键字&#xff1a;global1.5 关键字&#xff1a;nonloc…

在eclipse中导入本地的jar包配置Junit环境步骤(包含Junit中的方法一直标红的解决方法)

搭建JUnit环境 下文中我用到的本地jar包可以到我上传的资源中下载&#xff0c;不需要积分 链接&#xff1a;https://download.csdn.net/download/weixin_70987470/89571891?spm1001.2014.3001.5503 一、配置环境 跟上一篇的那种方法不一样&#xff0c;直接Add to Build Path …

MySQL的表,视图,索引创建

一。创建表 1。创建Student表 mysql> create table Student(Sno int primary key auto_increment,Sname varchar(30) not null unique,Ssex varchar(2) check (Ssex 男 or Ssex 女) not null,Sage int not null,Sdept varchar(10) default 计算机 not null); 2.创建Cour…

Linux云计算 |【第一阶段】SERVICES-DAY2

主要内容&#xff1a; DNS服务基础及搭建、特殊解析(针对地址库文件&#xff1a;DNS轮询 DNS泛域名解析 DNS别名&#xff09;、缓存DNS&#xff08;全局转发forwarders&#xff09;、DNS递归迭代&#xff08;子域授权&#xff09;、DNS主从架构搭建、DNS主从数据同步 一、DNS工…

基于Element UI内置的Select下拉和Tree树形组件,组合封装的树状下拉选择器

目录 简述 效果 功能描述 代码实现 总结 简述 基于Element UI内置的Select下拉和Tree树形组件&#xff0c;组合封装的树状下拉选择器。 效果 先看效果&#xff1a; 下拉状态&#xff1a; 选择后状态&#xff1a; 选择的数据&#xff1a; 功能描述 1、加载树结构&…

Python 使用TCP\UDP协议创建一个聊天室

server端代码&#xff1a; #encodingutf-8 # 服务端代码 import socketdef server():server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)host socket.gethostname()port 12345server_socket.bind((host, port))server_socket.listen(5)print(等待客户端连接…

如何通过一条SQL变更多个分库分表?

数据库发展到今天&#xff0c;分库分表已经不是什么新鲜话题了&#xff0c;传统的单节点数据库架构在数据量和访问频次达到一定规模时&#xff0c;会出现性能瓶颈和扩展性问题&#xff0c;而分库分表技术通过将数据分散到多个数据库实例中来分担负载&#xff0c;从而提升系统的…