MySQL数据库笔记——进阶篇

news2024/10/7 4:28:06

文章目录

  • 存储引擎
    • MySQL体系结构
    • 存储引擎简介
      • InnoDB介绍
      • MyISAM
      • Memory
    • 存储引擎的选择
    • 小结
  • 索引
    • 概述
    • 索引结构
      • 概述
      • Btree
      • B+Tree
      • Hash

存储引擎

MySQL体系结构

连接层:
最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
服务层:
第二层结构主要是完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。
引擎层
存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。
存储层:
主要是讲数据存储在文件系统之上,并完成与存储引擎的交互。
在这里插入图片描述

注意:索引是在存储引擎层实现的,也就意味着不同的存储引擎,索引的结构是不一样的
存储引擎控制的是数据库的数据该如何来存,如何来取,如何来组织,而具体的数据库数据最终是存储在磁盘当中的

存储引擎简介

what is 存储引擎?
do not know?
what is 引擎?
引擎就是发动机,发动机是一个机器的核心部分
而不同的引擎实际上是有不同的应用场景的(就像火箭的引擎不能放在汽车上)
引擎没有好坏,只要在合适的场景使用合适的引擎就可以了

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所有存储引擎也可被称为表类型

没有指定的存储引擎,那就是默认的InnoDB

1、在创建表时,指定存储引擎

CREATE TABLE 表名(
	...
)ENGINE = INNODB [ COMMIT 表注释];

2、查看当前数据库支持的存储引擎

SHOW ENGINES;

在这里插入图片描述
memory:存储在内存当中的,通常用来做临时表及缓存

create table my_myisam(
	id int,
	name varchar(10)
)engine = MyISAM;
create table my_memory(
	id int,
	name varchar(10)
)engine = Memory;

在这里插入图片描述

InnoDB介绍

InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎

特点
DML操作遵循ACID模型,支持事务
行级锁,提高并发访问性能
支持外键 FOREIGN KEY约束,保证数据的完整性和正确性;

文件
xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引
参数:innodb_file_per_table

在这里插入图片描述

MyISAM

介绍;
MyISAM是MySQL早期的默认存储引擎
特点:
不支持事务,不支持外键
支持表锁,不支持行锁
访问速度快

文件
xxx.sdi;存储表结构信息
xxx,MYD:存储数据
xxx.MYI:存储索引

Memory

介绍:Memory引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些作为临时表或缓存使用。

特点:
内存存放
能使用hash索引(默认)

文件:
xxx.sdi:存储表结构信息
为什么只有一个,因为其他的在内存里

存储引擎的选择

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。

InnoDB:是MySQL的默认存储引擎,支持事务、外键。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB是比较适合的选择

MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事物的完整性、并发性要求不是很高,那么选择这个存储引擎是非常适合的。

MEMORY:将所有的数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

小结

1、体系结构
连接层、服务层、引擎层、存储层
2、存储引擎简介

SHOW ENGINES;
CREATE TABLE XXXX(.....) ENGINE = INNODB;

3、存储引擎特点
INNODB与MyISAM:事务、外键、行级锁
4、存储引擎应用
INNODB:存储业务系统中对于事务、数据完整性要求较高的核心数据
MyISAM:存储业务系统的非核心事务

索引

概述

索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

普通的查找就是顺序查找,并且找到以后不会停止,会一直往下找,直到把表全找全了

索引的优缺点
优势:1、提高数据检索的效率,降低数据库的IO成本。2、通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗
劣势:1、索引列也要占用空间的。2、索引大大提高了查询效率,同时却也降低更新表的速度,如对标进行INSERT、UPDATE、DELETE时,效率降低

索引结构

概述

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种

索引结构:描述
B+Tree索引:最常见的索引类型,大部分引擎都支持B+树索引
Hash索引:底层数据结构使用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询
R-tree(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引):是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES

在这里插入图片描述
”错综复杂的关系“

我们平常所说的索引,如果没有特别指明,都是B+树结构组织的索引

Btree

在这里插入图片描述

二叉树的缺点:顺序插入时,会形成一个链表,查询性能大大降低。大数据量情况下,层级越深,检索速度慢。
可以通过红黑树解决单向链表的问题。但是大数据量情况下,层级较深,检索速度慢

而B-tree(多路平衡查找树)
以一颗最大度数(max-degree)为5(5阶)的B-tree为例(每个节点最多存储4个key,五个指针

具体动态变化的过程可以参考网站:
https://www.cs.usfca.edu/~galles/visualization/BTree.html

B+Tree

以一颗最大度数(max-degree)为4(4阶)的B+tree为例:
在这里插入图片描述
相对于B-Tree区别
1、所有的数据都会出现在叶子节点
2、叶子节点形成一个单向链表

B+Tree
MySQL索引数据结构对经典的B+Tree进行了优化。在原先B+TRee的基础上,增加了一个指向相邻节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。
在这里插入图片描述

Hash

哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对印的槽位上,然后存储在hash表中。
如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也叫做hash碰撞),可以通过链表来解决

Hash索引特点
1、Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,<,…)
2、无法利用索引完成排序操作
3、查询效率搞,通常只需要一次检索就可以了,效率通常要高于B+tree索引

存储引擎支持
在MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的。

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

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

相关文章

《计算机网络—自顶向下方法》 Wireshark实验(十):NAT 协议分析

NAT&#xff08;Network Address Translation&#xff09;网络地址转换&#xff0c;即在私有地址和全局地址之间转换的协议。私有地址是不能用在 Internet 上(路由器将丢弃寻址这种地址的包)的内部地址。这些地址是不能够在公网上面用的&#xff0c;只能用在局域网的内部。私有…

win安装Nodejs

文章目录 1、安装环境2、安装步骤3、更换npm源为淘宝镜像4、更多node版本下载 1、安装环境 node.js下载官网: nodejs官网 点击选中图标下载即可&#xff1a; 2、安装步骤 1、双击安装包&#xff0c;一直点击next 2、点击change按钮&#xff0c;更换到自己的指定安装位置&…

基于fpga的图像处理之3x3_5x5算子模板中值排序

本文的思路框架&#xff1a; ①本文介绍3x3算子模块和5x5算子模块中&#xff0c;矩阵转化成串行数据后&#xff0c;对其排序&#xff0c;并获取矩阵中值数据&#xff1b; ②本例程中采用的FPGA设计技巧&#xff0c;可用于借鉴&#xff0c;一是采用for循环实现串行数据转化并行数…

vite创建vue2项目

使用vite首先需要注意官方给出的兼容性注意 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本。 1.初始化vite项目 输入以下命令&#…

Spring MVC 是什么?与 Struts 的区别是什么?

Spring MVC是Spring框架中的一个模块&#xff0c;它提供了一种基于MVC&#xff08;Model-View-Controller&#xff09;架构的Web开发方式。与传统的JSP/Servlet开发方式相比&#xff0c;Spring MVC更加灵活、高效&#xff0c;可以帮助开发人员快速构建高质量的Web应用程序。本文…

vue diff算法与虚拟dom知识整理(10) 梳理patch处理相同节点比较的基本逻辑

这次 我们来讲 diff算法处理到 当新旧节点 是同一个节点时的处理 我们之前也说过 如果不是同一个节点 他就会暴力拆旧 把新的插上去 但当他们是同一个节点 需要精细化比较 最做小化更新 这块我们还没有处理 打开我们的案例 打开 patch.js 对应其实就还是这一块还没有写 我们…

PostgreSQL查询引擎——transform expressions之AEXPR_OP

static Node *transformAExprOp(ParseState *pstate, A_Expr *a){Node *lexpr a->lexpr; Node *rexpr a->rexpr; // 操作符左右表达式Node *result;/* Special-case "foo NULL" and "NULL foo" for compatibility with standards-broke…

Bug——后端返回LocalDateTime类型数据中间出现一个T

错误如下图所示: 返回的JSON格式数据里面会有一个多出来的T. 解决方案&#xff1a; 在后端的POJO层的实体类的LocalDateTime属性上面加上一个注解 JsonFormat(pattern"yyyy-MM-dd HH:mm:ss") 如下所示&#xff0c;然后在返回JSON格式数据时就不会出现那个多余的T了…

C++之模板初阶

目录 前言 1.泛型编程 2.模板 2.1 函数模板 2.1.1 函数模板概念 2.1.2 函数模板格式 2.1.3 函数模板的原理 2.1.4 函数模板的实例化 2.1.5 模板参数的匹配原则 2.2 类模板 2.2.1 类模板定义模式 2.2.2 类模板的实例化 前言 我们会不会有疑惑为什么C语言中&#xf…

Python学习笔记——cmeans模糊聚类例程

文章目录 模糊聚类应用简介安装环境demo&#xff1a;运行结果 模糊聚类应用简介 模糊聚类即通过模糊数学&#xff08;处理模糊或不确定性信息的数学方法&#xff09;的相关算法进行聚类分析任务。 常用的模糊聚类算法包括模糊C均值聚类&#xff08;FCM&#xff0c;Fuzzy-c mea…

TryHackMe-Red Team Capstone Challenge (红队挑战)【真实红队模拟】

Red Team Capstone Challenge 注意&#xff1a;我不会在这里提及相关的flag&#xff0c;只专心打&#xff1b;flag可以自己用各个hostname尝试一遍 挑战作者的一句话 这个房间被评为坚硬&#xff0c;但因为它是你前面的一座山&#xff0c;它可能被评为疯狂。但是&#xff0c;…

【Vue3】滑动验证组件 | 滑动验证

前言 滑块验证不只判断是否滑动到尾部&#xff0c;真正的目的是检测用户行为&#xff0c;检测行为是人为、脚本、还是其它。 防止使用脚本大量注册、请求等 。比如发送请求时&#xff0c;判断用户在某个页面停留了多长时间。登录、注册时是否点击了登录、注册按钮&#xff0c;…

Lesson1——数据结构前言

前言&#xff1a; 今天我们正式开始一个新的专栏——初阶数据结构&#xff08;C语言实现&#xff09;&#xff0c;本专栏后续持续更新时间复杂度空间复杂度、顺序表、链表、栈和队列、二叉树、排序等算法的相关知识&#xff0c;欢迎大家互相学习&#xff0c;可以私信互相讨论哦…

一次oracle环境 enq: TX - allocate ITL entry锁问题分析

enq: TX - allocate ITL entry锁问题分析 通过分析问题时间段两个节点的AWR报告&#xff0c;TOP1等待为锁竞争enq: TX - allocate ITL entry&#xff0c;该等待事件是由于缺省情况下创建的表的INITRANS参数为1,索引的INITRANS参数值为2.当有太多的并发DML操作的数据行处于相同的…

日志模块封封装:单例模式+策略模式+构建者模式+bugly

日志模块封封装:单例模式策略模式构建者模式bugly 一.单例模式策略模式构建者模式二.日志模块封装1.日志等级&#xff1a;LoggerLevel枚举类2.日志输出类型&#xff1a;LoggerType枚举类3.ILogger接口4.LogCatLogger/FileLogger/NetWorkLogger/EmailLogger5.使用构建者模式创建…

相同格式相同分辨率图片不同大小分析

1、问题 有三张图片&#xff0c;如下&#xff1a; 这三张图片均为jpg格式&#xff0c;分辨率均为1851*580&#xff0c;肉眼看不出区别。但是大小不同。 2号为217KB&#xff0c;4号为1.15MB&#xff0c;5号为1.06MB。 我们看下常规信息&#xff0c;先看2号&#xff1a; 可以…

初识Linux:第五篇

初识Linux&#xff1a;第五篇 初识Linux&#xff1a;第五篇1.Linux下的用户2.Linux权限管理2.1文件权限管理2.2文件权限的更改2.21改变文件访问权限属性2.22改变文件的身份 3.三个问题 总结 初识Linux&#xff1a;第五篇 &#x1f601;本篇主要介绍Linux权限的相关知识&#x1…

vue+elementui+nodejs高校校园在线打印预约系统

在线提交文档进行打印 首页简单介绍系统 语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 顶部或主页按钮转到打印 用户可以登录 查看历史打印记录 用户分学生和非学生 学生可以享有优惠…

基于.NetCore开源的Windows的GIF录屏工具

推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为 GIF 动图开源项目。 项目简介 这是基于.Net Core WPF 开发的、开源项目&#xff0c;可将屏幕截图转为 GIF 动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域&#xff0c;并将其转为 GIF动画&#x…

编写 ROS 消息发布订阅器(五)

执行命令&#xff0c;指定目录添加cpp文件 cd ~/catkin_ws/src/beginner_tutorials如果没有src目录&#xff0c; 就自己创建一个目录叫src cd src/ vim talker.cpp 复制代码粘贴&#xff1a; #include "ros/ros.h" #include "std_msgs/String.h" int m…