MySQL进阶 —— 超详细操作演示!!!(上)

MySQL进阶 —— 超详细操作演示!!!(上)

    • 一、存储引擎
      • 1.1 MySQL 体系结构
      • 1.2 存储引擎介绍
      • 1.3 存储引擎特点
      • 1.4 存储引擎选择
    • 二、索引
      • 2.1 索引概述
      • 2.2 索引结构
      • 2.3 索引分类
      • 2.4 索引语法
      • 2.5 SQL 性能分析
      • 2.6 索引使用
      • 2.7 索引设计原则
    • 三、SQL 优化
    • 四、视图/存储过程/触发器
    • 五、锁
    • 六、InnoDB 引擎
    • 七、MySQL 管理

一、存储引擎

1.1 MySQL 体系结构

在这里插入图片描述
1). 连接层

  • 最上层是一些 客户端链接服务,包含本地 sock 通信和大多数基于 客户端/服务端 工具实现的类似于 TCP/IP 的通信。
  • 主要完成一些类似于 连接处理授权认证、及相关的安全方案
  • 在该层上引入了 线程池 的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

2). 服务层

  • 第二层架构主要完成大多数的 核心服务功能,如 SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。
  • 所有跨存储引擎的功能也在这一层实现,如 过程函数等。
  • 在该层,服务器会解析查询并创建相应的内部 解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等,最后生成相应的执行操作。
  • 如果是 select 语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。

3). 引擎层

  • 存储引擎层, 存储引擎 真正的负责了MySQL中数据的存储和提取,服务器通过 API存储引擎进行通信。
  • 不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎
  • 数据库中的 索引 是在存储引擎层实现的。

4). 存储层

  • 数据存储层, 主要是将数据(如: redologundolog数据索引二进制日志错误日志查询日志慢查询日志等)存储在文件系统之上,并完成与存储引擎的交互。

和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。
这种架构可以根据业务的需求和实际需要选择合适的存储引擎

1.2 存储引擎介绍

在这里插入图片描述
大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件

  • 比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。
  • 而我们在选择引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎一样。

而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引擎。接下来就来介绍一下存储引擎。

  • 存储引擎就是 存储数据建立索引更新/查询数据等技术的实现方式 。
  • 存储引擎是 基于表的,而不是基于库的,所以存储引擎也可被称为 表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。(一个数据库有多个表,可以有多个存储引擎。)

1). 建表时指定存储引擎

create table 表名(字段1 字段1类型 [ comment 字段1注释 ] ,......字段n 字段n类型 [ comment 字段n注释 ]
) engine = InnoDB [ comment 表注释 ] ;

2). 查询当前数据库支持的存储引擎

show engines; 

🍁 示例演示:

  • A. 查询建表语句 — 默认存储引擎: InnoDB
show create table account;

在这里插入图片描述

我们可以看到,创建表时,即使我们没有指定存储引擎,数据库也会自动选择默认的存储引擎。

  • B. 查询当前数据库支持的存储引擎
show engines ;

在这里插入图片描述

  • C. 创建表 my_myisam , 并指定 MyISAM 存储引擎
create table my_myisam(id int,name varchar(10)
) engine = MyISAM ;

在这里插入图片描述

  • D. 创建表 my_memory , 指定 Memory 存储引擎
create table my_memory(id int,name varchar(10)
) engine = Memory ;

1.3 存储引擎特点

下面介绍较为重要的三种存储引擎 InnoDBMyISAMMemory 的特点。

⭐️ 1.3.1、InnoDB

1). 介绍

  • InnoDB是一种兼顾 高可靠性高性能 的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的
    MySQL 存储引擎。

2). 特点

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

3). 文件

  • xxx.ibdxxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构frm-早期的 、sdi-新版的)、数据索引
  • 参数:innodb_file_per_table
# 模糊匹配
show variables like 'innodb_file_per_table';

在这里插入图片描述

  • 如果该参数开启,代表对于 InnoDB 引擎的表,每一张表都对应一个 ibd 文件。

  • 我们直接打开MySQL的数据存放目录: C:\ProgramData\MySQL\MySQL Server 8.0\Data, ( ProgramData 是隐藏文件夹,设置查看隐藏文件),
    在这里插入图片描述

  • 这个目录下有很多文件夹,不同的文件夹代表不同的数据库,我们直接打开 rmzh 文件夹。
    在这里插入图片描述

  • 可以看到里面有很多的 ibd 文件,每一个 ibd 文件就对应一张表,比如:

    • 我们有一张表 account,就有这样的一个 account.ibd 文件,而在这个 ibd 文件中不仅存放 表结构数据,还会存放该表对应的索引信息
    • 而该文件是基于二进制存储的,不能直接基于记事本打开,我们可以在 cmd 命令行使用 mysql 提供的一个指令 ibd2sdi ,通过该指令就可以从 ibd 文件中提取 sdi 信息,而 sdi 数据字典信息中就包含该表的表结构。

在这里插入图片描述

4). 逻辑存储结构
在这里插入图片描述

  • 表空间 : InnoDB 存储引擎逻辑结构的最高层,ibd 文件其实就是表空间文件,在表空间中可以包含多个Segment 段。
  • : 表空间是由各个段组成的, 常见的段有 数据段索引段回滚段 等。InnoDB中对于段的管理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区。
  • : 区是表空间的单元结构,每个区的大小为 1M。 默认情况下, InnoDB 存储引擎页大小16K, 即一个区中一共64 个连续的页
  • : 页是组成区的最小单元,页也是 InnoDB 存储引擎磁盘管理的最小单元,每个页的大小默认为16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。
  • : InnoDB 存储引擎是 面向行 的,也就是说数据是按行进行存放的,在每一行中除了定义表时所指定的字段以外,还包含两个隐藏字段(后面会详细介绍)。

⭐️ 1.3.2、MyISAM

1). 介绍

  • MyISAM 是MySQL早期的默认存储引擎。

2). 特点

  • 不支持 事务,不支持 外键
  • 支持表锁不支持 行锁
  • 访问速度快

3). 文件

  • xxx.sdi:存储 表结构 信息 ( json 格式的)
  • xxx.MYD: 存储 数据
  • xxx.MYI: 存储 索引

在这里插入图片描述

  • 可以用记事本打开 xxx.sdi 文件,可以格式化查看:

在这里插入图片描述

⭐️ 1.3.3、Memory

1). 介绍

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

2). 特点

  • 内存存放 (访问速度是非常快的)
  • hash索引(默认)

3).文件

  • xxx.sdi:存储 表结构 信息

⭐️ 1.3.4、区别及特点

在这里插入图片描述

面试题:
InnoDB引擎与MyISAM引擎的区别 ?

  • ①. InnoDB引擎, 支持事务, 而MyISAM不支持。
  • ②. InnoDB引擎, 支持行锁表锁, 而MyISAM仅支持表锁, 不支持行锁
  • ③. InnoDB引擎, 支持外键, 而MyISAM是不支持的。

主要是上述三点区别,当然也可以从索引结构存储限制等方面,更加深入的回答,具体参考如下官方文档:

  • https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html
  • https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

1.4 存储引擎选择

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

  • InnoDB: 是Mysql的默认存储引擎,支持事务外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入查询之外,还包含很多的更新删除操作,那么 InnoDB 存储引擎是比较合适的选择。(大部分使用该存储引擎!!!)
  • MyISAM : 如果应用是以读操作插入操作为主,只有很少的更新和删除操作,并且对事务的完
    整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。(MongoDB取代了!)
  • MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY 的缺陷就是
    对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。(redis 取代了!)

🚀🚀🚀 存储引擎 快速食用:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------->

# 1. 体系结构
连接层、服务层、引擎层、存储层# 2、存储引擎简介
show engines ;  # 查询当前数据库支持的存储引擎
create table XXXX (……) engine = InnoDB ;# 3、存储引擎特点
InnoDB 与 MyISAM 区别: 事务、外键、行级锁# 存储引擎应用场景
InnoDB: 存储业务系统中对事务、数据完整性要求较高的核心数据。
MyISAM: 存储业务系统的非核心事务。

二、索引

以下使用 Linux 版本的 MySQL,因为在日常的生产、测试、开发开发环境,绝大部分用的都是Linux系统。

  • 安装过程可以参考我另一篇博客Linux系统——MySQL安装与卸载!!!

2.1 索引概述

⭐️ 介绍

索引( index )是帮助MySQL 高效获取数据数据结构(有序)

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

举个栗子

  • 表结构及其数据如下:

在这里插入图片描述

假如我们要执行的SQL语句为 : select * from user where age = 45;

1). 无索引情况

在这里插入图片描述

  • 在无索引情况下,就需要从第一行开始扫描,一直扫描到最后一行,我们称之为 全表扫描,性能很
    低。

2). 有索引情况

  • 如果我们针对于这张表建立了索引,假设索引结构就是二叉树,那么也就意味着,会对age这个字段建
    立一个二叉树的索引结构。

在这里插入图片描述

  • 此时我们在进行查询时,只需要扫描三次就可以找到数据了,极大的提高的查询的效率。

备注: 这里我们只是假设索引的结构是二叉树,介绍一下索引的大概原理,只是一个示意图,并不是索引的真实结构,索引的真实结构,后面会详细介绍。

2.2 索引结构

2.3 索引分类

2.4 索引语法

2.5 SQL 性能分析

2.6 索引使用

2.7 索引设计原则

三、SQL 优化

四、视图/存储过程/触发器

五、锁

六、InnoDB 引擎

七、MySQL 管理

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[学习笔记]CS224W

资料: 课程网址 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】 斯坦福大学CS224W图机器学习公开课-同济子豪兄中文精讲 图的基本表示 图是描述各种关联现象的通用语言。与传统数据分析中的样本服从独立同分布假设不一样,图数据自带关联…

Mysql 性能分析(慢日志、profiling、explain)、读写分离(主从架构)、分库分表(垂直分库、垂直分表、水平分表)

查看系统性能参数 一条sql查询语句在执行前,需要确定查询执行计划,如果存在多种执行计划的话,mysql会计算每个执行计划所需要的成本,从中选择 成本最小的一个作为最终执行的执行计划 想要查看某条sql语句的查询成本,可…

SpringMVC框架@RequestMapping用法,处理器方法参数接收,处理器方法返回值详解

1. RequestMapping 定义请求规则 1.1 指定模块名称 通过RequestMapping 注解可以定义处理器对于请求的映射规则。该注解可以注解在方 法上,也可以注解在类上,但意义是不同的。value 属性值常以“/”开始。RequestMapping 的 value 属性用于定义所匹配请…

大数据下的精准营销获客

2012年以后,大数据(big data)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,并命名与之相关的技术发展与创新。哈佛大学社会学教授加里金说“这是一场革命,庞大的数据资源使得各个…

【面试经典150 | 数组】合并两个有序数组

文章目录 写在前面Tag题目来源题目解读解题思路方法一:合并排序方法二:双指针方法三:原地操作-从前往后方法四:原地操作-从后往前 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法,它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中,可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

基于SSM的蜀都天香酒楼管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

【Tomcat服务部署及优化】

Tomcat 一、什么是Tomcat?二、Tomcat 核心组件2.1 Tomcat 组件2.3 Container组件的结构2.4 Tomcat 请求过程 三、Tomcat 部署3.1 安装JDK3.2 设置JDK环境变量3.3 安装Tomcat并用supervisor启动解压添加到supervisord服务测试能否通过supervisorctl启动 四、Tomcat的端口和主要…

Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

1.场景 我们在调用接口时,很多时候会同时调用多个接口,接口都是异步执行,我们很难知道调用的多个接口哪个会最后执行完成,我们有时候需要对最后一个接口执行完成的时机监听,所以基于该需求,设计了CombineE…

RabbitMQ: 死信队列

一、在客户端创建方式 1.创建死信交换机 2.创建类生产者队列 3.创建死信队列 其实就是一个普通的队列,绑定号私信交换机,不给ttl,给上匹配的路由,等待交换机发送消息。 二、springboot实现创建类生产者队列 1.在消费者里的…

如何选择报修管理系统?报修工单管理系统有哪些功能和优势?

报修管理系统是一种能够帮助企业快速反应设备故障和异常情况,并将问题及时通知到相关人员,并对问题进行统计和分析的系统。它能够有效提高企业的工作效率,并减少人员成本的支出。那么,报修工单管理系统有哪些功能和优势呢?下面以“…

nginx-缓存

disk cache:磁盘缓存数据,有时间延迟,但是非常小,相对于直接请求服务器返回 对于用户来说基本无感知。 memory cache:磁盘缓存数据,基本上没有时间延迟 协商缓存(nginx自带功能, 不…

C++函数内联详解

本文旨在讲解C中的函数内联相关知识,读完这篇文章,希望读者们会对函数内联有更深一步的认识! 内联函数的定义 在计算机科学中, 内联函数 (有时称作 在线函数 或 编译时期展开函数 )是一种编程语言结构&…

详解Vue中的render: h => h(App)

声明:只是记录,会有错误,谨慎阅读 我们用脚手架初始化工程的时候,main.js的代码如下 import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({// 把app组件放入容器中render: h > h(App), }).$mount(#ap…

洛谷P8814:解密 ← CSP-J 2022 复赛第2题

【题目来源】https://www.luogu.com.cn/problem/P8814https://www.acwing.com/problem/content/4732/【题目描述】 给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni,ei,di,求两个正整数 pi,qi&#xf…

vue中的几种name属性

vue中的几种name属性 组件名name name选项 export default{name:xxx } // 获取组件的name属性 this.$options.namevue-devtools调试工具里显示的组件名称; 未配置name选项,就是组件的文件名; vue3配置name通过defineOptions()函数 de…

flink cdc多种数据源安装、配置与验证

搜索 flink cdc多种数据源安装、配置与验证 文章目录 1. 前言2. 数据源安装与配置2.1 MySQL2.1.1 安装2.1.2 CDC 配置2.2 Postgresql2.2.1 安装2.2.2 CDC 配置2.3 Oracle2.3.1 安装2.3.2 CDC 配置2.4 SQLServer2.4.1 安装2.4.2 CDC 配置3. 验证3.1 Flink版本与CDC版本的对应关系…

nlp系列(7)实体识别(Bert)pytorch

模型介绍 本项目是使用Bert模型来进行文本的实体识别。 Bert模型介绍可以查看这篇文章:nlp系列(2)文本分类(Bert)pytorch_bert文本分类_牧子川的博客-CSDN博客 模型结构 Bert模型的模型结构: 数据介绍 …

MySQL——常见问题

NULL和空值的区别 1、空值不占空间,NULL值占空间。当字段不为NULL时,也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时,只能查出字段中没有不为NULL的或者为 NULL 的,不能查出空值。 3、判断NULL 用IS NULL 或者 is no…

46、TCP的“三次握手”

在上一节中,TCP首部常用的几个选项,有些选项的参数就是在通信双方在建立TCP连接的时候进行确定和协商的。所以在学习过TCP报文首部之后,下面我们开始学习TCP的连接建立。 TCP的一个特点是提供可靠的传输机制,还有一个特点就是TCP…