当前位置: 首页 > news >正文

MYSQL存储引擎InnoDB, MyISAM简介

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进行解压操作

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

相关文章:

  • 高精度-----乘法
  • go--互斥锁
  • Linux发展史
  • Servlet生命周期
  • WiFi通信——STM32通过ESP8266-01S与阿里云通信
  • Elasticsearch:Golang ECS 日志记录 - Logrus
  • 总结
  • Redis在SpringBoot中遇到的问题:预热,雪崩,击穿,穿透
  • kafka基础介绍
  • 卷与nfs实现多台主机容器之间的数据共享
  • 十、Docker版Redis集群搭建
  • DP学习——状态模式
  • idea将普通项目转换为maven项目
  • 使用JAVA代码实现生成二维码
  • windows网络应急排查
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【笔记】你不知道的JS读书笔记——Promise
  • AWS实战 - 利用IAM对S3做访问控制
  • CSS居中完全指南——构建CSS居中决策树
  • egg(89)--egg之redis的发布和订阅
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java 最常见的 200+ 面试题:面试必备
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • magento2项目上线注意事项
  • php中curl和soap方式请求服务超时问题
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Vue组件定义
  • 仿天猫超市收藏抛物线动画工具库
  • 区块链分支循环
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 阿里云服务器购买完整流程
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #AngularJS#$sce.trustAsResourceUrl
  • #define、const、typedef的差别
  • #stm32整理(一)flash读写
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (26)4.7 字符函数和字符串函数
  • (3)llvm ir转换过程
  • (阿里云万网)-域名注册购买实名流程
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (二)c52学习之旅-简单了解单片机
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 快速重构概要1
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET与 java通用的3DES加密解密方法
  • .NET中的Exception处理(C#)
  • [20160902]rm -rf的惨案.txt
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [Angular 基础] - 指令(directives)
  • [CODE:-5504]没有[SYS.SYSOBJECTS]对象的查询权限
  • [Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8