MySQL存储引擎MyISAM和InnoDB

news2024/9/17 7:42:06

1.1MySQL存储引擎

1.1.1概述

1、什么是存储引擎

MySQL中的数据用各种不同的技术存储在文件(或内存)中。这些技术中的每一种都使用不同的存储机制、索引技巧、锁定水平并且提供广泛的、不同的功能和能力;通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体性能;

这些不同技术以及配套的相关功能在Mysql中被称为存储引擎(也称作表类型)

补充:

关系数据库表:用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于excel电子表格的形式;有的表简单、有的表复杂、有的表不用来存储任何长期数据、有的表读取时非常快,但是插入数据时却很差。

在实际开发过程中中,可能需要各种各样的表,不同的表意味着存储不同类型的数据,数据的处理上也会存在着差异;那么,对于mysql来说,它提供了很多类型的存储引擎(或者说不同的表类型),根据对数据处理的需求,可以选择不同的存储引擎,从而最大限度的利用MySQL强大的功能;

2、存储引擎的类型

Innodb、MyISAM、memory、archive、

查看存储引擎:show engines;

默认存储引擎

 (1)MyISAM存储引擎

》MyISAM存储引擎不支持事务,不支持外键,支持全文索引、B树索引

》特点:访问速度快,对事务完整性没有要求,以select、insert为主的应用基本都可以使用这个引擎来创建表;

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

frm:存储的是表的结构、定义(比如表有多少列、每个列的名字)

MYD:D是数据,表中每一行的记录放到这里

MYI:I是索引,这个文件存放的是索引

 》存储空间:256T

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

每个MyISAM表都有一个标志,服务器或myisam程序在检查MyISAM数据表时会对这个标志进行设置。

MyISAM表还有一个标志来表明该数据表在上次使用后是不是被正常关闭了;如果服务器意外宕机或崩溃,这个标志可以用来判断数据表是否需要检查和修复;如果想让这种检查自动进行,可以在启动服务器时使用--myisam-recover实现。这会让服务器在每次打开一个MyISAM数据表时自动检查数据表的标志并进行必要的修复处理;

MyISAM类型的表可能会损坏,可以使用check table语句来检查MyISAM表的健康,并用repair table语句修复一个损坏的MyISAM表;

 》MyISAM表支持3种不同的存储格式:静态表、动态表、压缩表


静态(固定长度)表:是默认的存储格式;

----静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常的迅速,容易缓存,出现故障容易恢复;

----缺点:占用的空间通常比动态表多;静态表在数据存储时会根据列定义的宽度定义补足空格;

----注意:在某些情况下可能需要返回字段后的空格,而使用这种格式时后面的空格会自动处理掉;


动态表:包含可变字段,记录不是固定长度的;

----优点:占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行optimize table语句或myisamchk -r命令来改善性能;

----出现故障的时候恢复相对比较困难;


压缩表:由myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支;

(2)Innodb存储引擎

》Innodb是一个事务性存储引擎,MySQL从5.5.5版本开始,默认的存储引擎为Innodb;Innodb存储引擎还引入了行级锁定和外键约束;

》以下场景使用Innodb存储引擎是最理想的选择:

更新密集的表:Innodb存储引擎特别适合处理多重并发的更新请求

事物:Innodb存储引擎是支持事物的标准MySQL存储引擎

自动灾难恢复:于其它引擎不同,Innodb表能够自动从灾难中恢复;

外键约束:MySQL支持外键的存储引擎只有Innodb

支持自动增加列auto_increment属性

(3)总结

一般来说,如果需要事务支持,并且有较高的并发读取频率,Innodb是不错的选择;

》Innodb:支持事务,MyISAM不支持;事物是一种高级的处理方式,如对一些表中的列进行增删改的过程中只要哪个出错还可以回滚还原,而MyISAM就不可以;

》MyISAM适合查询、插入为主的应用,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的选择使用

Innodb会支持一些关系数据库的高级功能,如事物和行级锁,MyISAM不支持;MyISAM的性能更优,占用的存储空间少;

(1)如果应用程序一定要使用事物,选择Innodb引擎;Innodb的行级锁是有条件的,在where条件没有使用主键时,照样会锁全表;如delete from mytable这样的删除语句

(2)如果应用程序对查询性能要求较高,用MyISAM;MyISAM索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存;所以查询性能明显优于Innodb。压缩后的索引也能节约一些磁盘空间;

1.1.2操作

1、登录mysql,创建库、表,查看新创建的库

2、再新创建一个表

注释:在auth库中,再创建一个表,会多两个文件;一个是frm,一个是ibd;而opt是共用的,不会随着新创建的表,而增加,它是该库的一些配置信息,比如说:编码,查询规则等这些信息所存放的地方;frm:元数据;ibd:核心数据;myisam有专门放置索引文件的文件,而innodb是没有的,索引和数据是在一起的;

3、设置存储引擎

(1)登录

(2)显示auth库中users这个表的信息

注释:同一个库不同的表,可以设置不同的存储引擎;存储引擎是针对表的,可以针对不同的表设置不同的存储引擎;

(3)进入auth库中,改变存储引擎(方式1)

注释:不同的存储引擎,所生成的表的文件的后缀名是不一样的;

           如果设置的有事务相关的技术,改完存储引擎就不能用了,因为innodb支持事务,myisam不支持;

(4)创建表的时候,设置存储引擎(方式2)

注释:大小写不影响

(5)临时设置存储引擎

注释:set设置,只在当前会话内生效;一旦断开,再次连接,就回到配置文件指定的;

(6)比较myisam和innodb处理数据的速度

谁写入快、谁读取快;谁带索引读取快、谁带索引写入快;

读:有索引的和没索引的

》创建库、表

》写测试脚本

create procedure insertm()
begin
set @i=1;
while @i<=10000000
do
insert into tm(name) values(concat("zhangsan",@i));
set @i=@i+1;
end while;
end
$
create procedure inserti()
begin
set @i=1;
while @i<=10000000
do
insert into ti(name) values(concat("zhangsan",@i));
set @i=@i+1;
end while;
end
$

更改结束符

创建存储过程

向两个表添加10000000行记录(利用存储过程)

更改结束符号

呼叫存储过程

写入:myisam更快;

读取速度

注释:无索引--myisam更快

》有索引

注释:带索引是innodb更快

 

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

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

相关文章

JavaScript - 如何安装和配置Yarn包管理器

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 Yarn是一个快速…

Langchain--如何使用大模型 2.0

【&#x1f34a;易编橙终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 Langch…

集合竞价逐笔数据验证,level2行情接口验证

最近做集合竞价的策略&#xff0c;用的level2数据。集合竞价阶段推送数据量很大&#xff0c;但是不确定有没有因为网络原因的数据纰漏&#xff0c;所以需要验证一下。 把今天所有的数据记录了日志&#xff0c;其中筛选了09:25集合竞价的推送&#xff1a; grep 2024/07/29 09:2…

Linux服务器安装Zabbix7.0客户端实战记录和问题记录

1、获取最新的Zabbix客户端包&#xff0c;不同的linux的系统选择不同的安装包 阿里云镜像站 按照一下的格式惊醒编辑替换自己的安装包 openEuler&#xff1a;rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-4.el9.noarch.rpm?sp…

Python 实现股票指标计算——DKX

DKX - 多空线 1 公式 MID&#xff1a;(3*CLOSELOWOPENHIGH)/6&#xff1b; DKX&#xff1a;(20*MID)19*REF(MID&#xff0c;1)18*REF(MID&#xff0c;2)17*REF(MID&#xff0c;3) 16*REF(MID&#xff0c;4)15*REF(MID&#xff0c;5)14*REF(MID&#xff0c;6) 13*REF(MID&a…

springboot高职院校毕业生信息管理系统-计算机毕业设计源码27889

摘 要 基于Java语言开发的高职院校毕业生信息管理系统旨在提供一个便捷、高效的方式来管理毕业生的相关信息。系统包括学生基本信息管理、成绩管理、就业信息管理等模块&#xff0c;通过界面友好、操作简单的设计&#xff0c;方便管理员快速查询和更新学生信息。系统还提供数据…

Vue2从基础到实战(指令修饰符)详解

什么是指令修饰符&#xff1f; 指令修饰符就是通过“.”指明一些指令后缀 不同的后缀封装了不同的处理操作 —> 简化代码 按键修饰符 keyup.enter —>当点击enter键的时候才触发 v-model修饰符 v-model.trim —>去除首位空格 v-model.number —>转数字 事件修…

使用docker在CentOS 7上安装php+mysql+nginx环境教程并运行WordPress

文章目录 一、安装docker1、切换yum源并更新系统2、卸载旧版docker3、配置Docker的yum库4、安装Docker5、启动和校验Docker6、配置镜像加速6.1、注册阿里云账号6.2、开通镜像服务6.3、配置镜像加速二、部署php+mysql+nginx环境1、准备目录结构2、拉取镜像3、运行容器并从中拷贝…

【Opencv】模糊

消除噪声 用该像素周围的平均值代替该像素值 4个函数 blur():最经典的 import os import cv2 img cv2.imread(os.path.join(.,dog.jpg)) k_size 7 #窗口大小&#xff0c;数字越大&#xff0c;模糊越强 img_blur cv2.blur(img,(k_size,k_size)) #窗口是正方形&#xff…

用依赖倒置和控制反转,突破Golang循环调用限制之后的思考

在软件开发中&#xff0c;随着项目规模的扩大和业务逻辑的复杂化&#xff0c;重构代码变得越来越重要。本文将介绍如何在既有代码基础上&#xff0c;通过依赖倒置&#xff08;DIP&#xff09;和控制反转&#xff08;IoC&#xff09;&#xff0c;实现新增加的代码可以循环引用到…

UI设计经验心得:优化设计流程与实战技巧分享

随着互联网的快速发展&#xff0c;UI 设计在中国也逐渐发展起来。UI 设计的目的不仅仅是让用户享受视觉享受&#xff0c;而是解决用户如何与互联网设备互动。因此&#xff0c;UI 设计是通过深入研究用户的使用习惯和操作逻辑来设计界面的互动和视觉效果。那么&#xff0c;UI 设…

邮箱API在CRM系统中如何高效的应用与集成?

邮箱API的高级功能和使用指南&#xff1f;怎么安全集成邮箱API&#xff1f; CRM系统已成为企业与客户保持联系的关键工具。通过集成邮箱API&#xff0c;企业可以大幅提升CRM系统的功能和效率。AokSend将探讨邮箱API在CRM系统中的高效应用与集成。 邮箱API&#xff1a;主要功能…

龙迅LT8642UXE 矩阵HDMI *4转HDMI *2输出切换芯片,支持HDMI 2.0,可带HDCP

LT8642UXE描述&#xff1a; LT8642UXE HDMI2.0/1.4交换机具有4&#xff1a;2的开关&#xff0c;符合HDMI2.0/1.4规格&#xff0c;最大6Gbps高速数据速率&#xff0c;自适应均衡RX输入和预先强调的TX输出&#xff0c;以支持长电缆应用程序。LT8642UXE HDMI2.0/1.4交换机自动检测…

JVM—运行时数据区域

Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 1、程序计数器—线程私有 字节码解释器工作时通过改变这个计数器的值&#xff0c;选取下一条执行的字节码指令。程序计数器是程序控制的指示器&#xff0c;分支、循环、跳转、异常处理、线…

适合证券公司的跨网传输解决方案,了解一下

证券公司由于其业务特性&#xff0c;涉及大量的敏感财务数据和交易信息&#xff0c;因此通常会在内部实施网络隔离措施。目的是为了保护数据免受未授权访问和网络攻击&#xff0c;确保数据的安全性和保密性&#xff0c;因此急需寻找安全可靠的跨网传输解决方案&#xff0c;实现…

拆解了数百个独立站,我们总结的高转化页面布局精华

高转化的独立站的页面布局都具备什么要素呢&#xff1f; 我们研究了几百个独立站&#xff0c;结合我们自己的项目经验&#xff0c;总结出转化率相对高的网站布局&#xff0c;都有以下注意的要点清单&#xff1a; 1 品牌Logo基本放在头部左边或者中间 2 首屏大banner 3 社交媒…

【可能是全网最丝滑的LangChain教程】十九、LangChain进阶之Agents

幸福&#xff0c;不是长生不老&#xff0c;不是大鱼大肉&#xff0c;不是权倾朝野。幸福是每一个微小的生活愿望达成。当你想吃的时候有得吃&#xff0c;想被爱的时候有人来爱你。 01 Agent介绍 在LangChain中&#xff0c;Agent 是一个核心概念&#xff0c;它代表了一种能够利…

CTF Web信息搜集 25000字详解

目录 前言信息收集常见信息分类域名信息whois备案CDN子域名解析记录 旁站C段服务器信息端口服务器类型数据库类型waf防火墙 网站信息备份文件备份文件常见的后缀名备份文件常见的文件名gedit备份文件vim备份文件收集方法 敏感目录CMS类型&#xff08;指纹识别&#xff09;探针泄…

牛客JS题(十二)列表动态渲染

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 忍者码风reduce注意事项 题干&#xff1a; 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"></head><body><ul></ul><…

决策树 和 集成学习、随机森林

决策树是非参数学习算法&#xff0c;可以解决分类问题&#xff0c;天然可以解决多分类问题&#xff08;不同于逻辑回归或者SVM&#xff0c;需要通过OVR&#xff0c;OVO的方法&#xff09;&#xff0c;也可以解决回归问题&#xff0c;甚至是多输出任务&#xff0c;并且决策树有非…