首页 > 数据库 >存储引擎的概念及作用,玩转MySQL

存储引擎的概念及作用,玩转MySQL

时间:2023-06-02 10:56:33浏览次数:48  
标签:存储 事务 支持 引擎 InnoDB 玩转 MyISAM MySQL

前言

从今天开始, 就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。


全文大约【1567】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图视频,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

一. 存储引擎介绍

1. 什么是存储引擎

数据库最核心的一点就是用来存储数据,数据存储就避免不了和磁盘打交道。那么数据以哪种方式进行存储,如何存储是存储的关键所在。所以存储引擎就相当于是数据存储的发动机,来驱动数据在磁盘层面进行存储。不同的存储引擎功能差别很大。各位小伙伴不要着急,下面我们逐一道来。

查看存储引擎:

SHOW ENGINES;

在这里插入图片描述

2. InnoDB存储引擎

特点:

  • InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。相比较MyISAM存储引擎,InnoDB写的处理效率差一点并且会占用更多的磁盘空间保留数据和索引。
  • 提供了对数据库事务ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)的支持,实现了SQL标准的四种隔离级别。
  • 设计目标就是处理大容量的数据库系统,MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。
  • 执行“select count(*) from table”语句时需要扫描全表,因为使用innodb引擎的表不会保存表的具体行数,所以需要扫描整个表才能计算多少行。
  • InnoDB引擎是行锁,粒度更小,所以写操作不会锁定全表,在并发较高时,使用InnoDB会提升效率。即存在大量UPDATE/INSERT操作时,效率较高。
  • InnoDB清空数据量大的表时,是非常缓慢,这是因为InnoDB必须处理表中的每一行,根据InnoDB的事务设计原则,首先需要把“删除动作”写入“事务日志”,然后写入实际的表。所以,清空大表的时候,最好直接drop table然后重建。即InnoDB一行一行删除,不会重建表。

使用场景:

  • 经常UPDETE/INSERT的表,使用处理多并发的写请求。
  • 支持事务,必选InnoDB。
  • 可以从灾难中恢复(日志+事务回滚)。
  • 外键约束、列属性AUTO_INCREMENT支持。

3. MyISAM存储引擎

特点:

  • MyISAM不支持事务,不支持外键,SELECT/INSERT为主的应用可以使用该引擎。
  • 每个MyISAM在存储成3个文件,扩展名分别是:
    • frm:存储表定义(表结构等信息)。
    • MYD(MYData),存储数据。
    • MYI(MYIndex),存储索引。
  • 不同MyISAM表的索引文件和数据文件可以放置到不同的路径下。
  • MyISAM类型的表提供修复的工具,可以用CHECK TABLE语句来检查MyISAM表健康,并用REPAIR TABLE语句修复一个损坏的MyISAM表。
  • 在MySQL5.6以前,只有MyISAM支持Full-text全文索引。

使用场景:

  • 经常SELECT/INSERT的表,插入不频繁,查询非常频繁。
  • 不支持事务。
  • 做很多count 的计算。

4. MyISAM和Innodb区别

下面给各位小伙伴梳理下,敲黑板啦,重点来啦。

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个存储引擎,这两个存储引擎各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理,而InnoDB类型支持。MyISAM类型强调的是性能,其执行速度比InnoDB类型更快,而InnoDB提供事务支持已经外部键等高级数据库功能。

具体实现的差别:

  • MyISAM是非事务安全型的,而InnoDB是事务安全型的。
  • MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
  • MyISAM不支持外键,而InnoDB支持外键。
  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
  • InnoDB表比MyISAM表更安全。

二. 结语

最后在这里对本文核心要点进行总结:

  1. MySQL最常用的存储引擎就是InnoDB和MyISAM这两个引擎,所以需要各位小伙伴熟记。
  2. 默认的存储引擎是InnoDB支持事务、主外键关系。

三. 配套视频

如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看筛选出的视频教程。与本文配套的Java学习视频,链接如下


标签:存储,事务,支持,引擎,InnoDB,玩转,MyISAM,MySQL
From: https://www.cnblogs.com/qian-fen/p/17451132.html

相关文章

  • ESXI里多个存储,找到对应存储ISCSI的IP地址
    ESXI里多个存储,找到对应存储ISCSI的IP地址   存储→数据存储→点你想知道的存储名称,(lhISCSI)点进来后复制数据区0的一堆文字,这里是naa.600a098000b6280d000001d859092b40,分区1  到存储→适配器→配置iSCSI在静态目标里面找到600a098000b6280d对应的IP是192.168.1.......
  • Mysql:优化数据库结构
    冷热拆分表本同一张表的数据,有些字段用得多,有些用些用得少。在数据量大的情况下,可以将热数据单独一张,冷数据单独一张。典型的是用户基础信息表和用户详细信息表增加冗余字段学生表关联课程表,需要展示课程的简介和名称。可以考虑把这两个字段冗余到学生表里增加非空约束在业务......
  • 对应用数据开发还有疑惑?看这篇就够了!数据存储、管理,通通掌握!
     原文:https://mp.weixin.qq.com/s/0YzFUfx-1ZdfOQhaeekwhg,点击链接查看更多技术内容。数据管理可以做什么?应用数据的持久化怎么实现?如何实现数据库加密?在开发应用进行应用数据的处理时,您是否也会有这些疑问呢?现在,我们推出了更为清晰完善的数据管理文档,帮助开发者明确各种......
  • MySQL之视图,索引,存储过程,触发器--实操
    一.视图什么是视图?视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含系列带有名称的列和行数据。行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由select结果组成的表。视图的出现其实优化了MySQL对用户权限的管理,我们在以......
  • Mysql训练营笔记
    Mysql架构与内部模块演示环境:MySQL5.7存储引擎:InnoDB一、一条查询SQL是如何执行的?  程序或者工具要操作数据库,第一步跟数据库建立连接。1、通信协议首先,MySQL必须要运行一个服务,监听默认的端口(3306)。通信协议MySQL支持多种通信协议。第一个就是TCP/IP协议,编......
  • Mysql优化
    死锁优化1.执行查询命令showprocesslist2.生成杀连接命令selectconcat('kill',id,';'),Timefrominformation_schema.processlistwhere1=1andTime>100orderbyTimedesc;3.执行这些kill即可.4.检查sql语句,优化那些同一语句里多个执行的语句或者同一事务里......
  • Mysql && Oracle 纵向拼接,多行合并为一行
    纵向合并MysqlGROUP_CONCAT函数用法:GROUP_CONCAT(合并的字段名orderby排序字段SEPARATOR分割符)方式一:只合并GROUP_CONCAT(stu.NAME)方式二:带排序GROUP_CONCAT(stu.NAMEORDERBYs.scoreDESC)方式三:带分割符GROUP_CONCAT(stu.NAMEORDERBYs.scoreDESCSEPA......
  • 线性表的顺序存储结构
    线性表的顺序存储结构标签(空格分隔):DS线性表顺序存储1.线性表的顺序存储结构#defineMAXSIZE20//数组最大长度typedefstruct{ElemeTypedata[MAXSIZE];//数组顺序存储元素,data即为存储空间的起始位置intlength;//线性表当前长度:表中元素的个数length<=MAXSIZE}SqLi......
  • 线性表的链式存储结构
    线性表的链式存储结构标签(空格分隔):DS线性表链式存储1.线性表的单链表存储结构typedefstructNode{ElemTypedata;//数据域structNode*next;//指针域}Node,*pNode;//节点,节点指针typedefstructNode*LinkList;//头指针指向头节点2.单链表的读取第i个元......
  • 16)创建存储过程
    1、创建存储过程的语法:createprocedure存储过程名(参数1,参数2,...)begin存储过程语句块;end;存储过程有三种类型的参数:in:默认输入参数;out:输出参数;inout:既是输入也是输出参数;测试:实现一个输入学生号,得出学生选修课数目;delimiter$$createprocedureget_choos......