MySQL笔记(进阶篇)

news2024/11/18 3:19:02

包含内容:    

    存储引擎
    索引
    SQL优化
    视图/存储过程/触发器
    锁
    InnoDB引擎
    MySQL管理

存储引擎

MySQL体系结构

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

存储引擎简介

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

默认存储引擎:

InnoDB引擎

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

CREATE TABLE 表名(
                    字段1 字段1类型[comment 字段1注释],
                    ...
                    字段n 字段n类型[comment 字段n注释]
                )ENGINE=INNODB[comment 表注释];

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

SHOW ENGINES;

demo:

## 创建表my_myisam ,并制定MyISAM存储引擎
                create table my_myisam(
                    id int,
                    name varchar(10)
                )engine =MyISAM;
## 创建表my_memory,置顶Memory存储引擎
                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

逻辑存储结构:

见图"逻辑存储结构"

MyISM引擎

介绍:

MyISM引擎是MySQL早期的默认存储引擎

特点:
  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快
文件: 
  • xxx.MYD:存放表数据信息
  • xxx.MYI: 存储索引
  • XXX.SDI:存放表结构信息

Memory引擎

介绍:

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

特点:
  • 内存存放
  • hash索引(默认)
文件:

xxx.sdi: 存储表结构信息

三种存储引擎区别

见图: 存储引擎区别


      

存储引擎选择

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

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

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

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

索引

    索引概述
    索引结构
    索引分类
    索引语法
    SQL性能分析
    索引使用
    索引设计原则


索引概述

介绍

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

演示

见图 索引概述1

优缺点

见图 索引优缺点

索引结构

索引结构: 见图 索引结构1

不同引擎索引支持情况:

见图 不同引擎索引支持情况1


二叉树索引:

见图 二叉树索引


B-Tree(多路平衡查找树):

见图 B-Tree(多路平衡查找树)


B-Tree(多路平衡查找树)演变过程:

见图 B-Tree(多路平衡查找树)演变过程


B+Tree 索引结构

见图 B+Tree 索引结构


B+Tree与B-Tree 区别  

见图B+Tree与B-Tree 区别


Hash索引结构:

见图Hash索引结构


Hash索引特点和引擎支持:

见图Hash索引特点+引擎支持


为什么InnoDB存储引擎选择B+tree索引结构?

见图: 为什么InnoDB存储引擎选择B+tree索引结构


索引分类

见图: 索引分类

在InnoDB存储引擎中,根据索引的存储方式,又可以分为以下两种:

见图: InnoDB存储方式


聚集索引和二级索引对比:

见图: 聚集索引和二级索引


回表查询:

见图: 回表查询


索引语法

创建索引

CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name (index_col_name, ...);

查看索引

SHOW INDEX FROM table_name;

删除索引

DROP INDEX index_name ON table_name;

案例

建表
                create table tb_user(
                id int comment 'id',
                name varchar(10) comment 'name',
                phone varchar(11) comment 'phone',
                email varchar(20) comment 'email',
                profession varchar(10) comment 'profession',
                age int comment 'age',
                gender varchar(1) comment 'gender',
                status varchar(2) comment 'status'
            ) comment '数据表';

                alter table tb_user add createtime date comment 'createtime';

                insert into tb_user(id, name, phone, email, profession, age, gender, status, createtime) VALUES
                (1,'吕布','17799990000','lvbu@163.com','软件工程',23,'1','6','2001-02-02'),
                (2,'曹操','17799990001','caocao@qq.com','通讯工程',33,'1','0','2001-03-05'),
                (3,'赵云','17799990002','zhaoyun@qq.com','英语',34,'1','2','2002-03-02'),
                (4,'孙悟空','17799990003','sunwuk@qq.com','工程造价',54,1,'0','2001-07-02'),
                (5,'花木兰','17799990004','1@qq.com','软件工程',23,'2','1','2001-04-22'),
                (6,'大乔','17799990005','2@qq.com','舞蹈',22,'2','0','2001-02-07'),
                (7,'露娜','17799990006','3@qq.com','应用数学',24,'2','0','2001-02-08'),
                (8,'程咬金','17799990007','4@qq.com','化工',38,'1','5','2001-05-23'),
                (9,'项羽','17799990008','5@qq.com','金属材料',43,'1','0','2001-09-18'),
                (10,'白起','17799990009','6@qq.com','机械工程及其自动化',27,'1','2','2001-08-16'),
                (11,'韩信','17799990010','7@qq.com','无机非金属',27,'1','0','2001-06-12'),
                (12,'荆轲','17799990011','8@qq.com','会计',29,'1','0','2001-05-11'),
                (13,'兰陵王','17799990012','9@qq.com','工程造价',44,'1','1','2001-04-09'),
                (14,'狂铁','17799990013','0@qq.com','应用数学',43,'1','2','2001-04-10'),
                (15,'貂蝉','17799990014','11@qq.com','软件工程',40,'2','3','2001-02-12'),
                (16,'妲己','17799990015','12@qq.com','软件工程',31,'2','0','2001-01-30'),
                (17,'闵月','17799990016','13@qq.com','工业经济',35,'2','0','2000-05-03'),
                (18,'嬴政','17799990017','14@qq.com','化工',38,'1','1','2001-08-08'),
                (19,'狄仁杰','17799990018','15@qq.com','国际贸易',30,'1','0','2007-03-12'),
                (20,'安其拉','17799990019','16@qq.com','城市规划',51,'2','0','2001-08-15'),
                (21,'典韦','17799990020','123@qq.com','城市规划',52,'1','2','2000-04-12'),
                (22,'廉颇','17799990021','2222@qq.com','土木工程',19,'1','3','2002-07-18'),
                (23,'后羿','17799990022','1232@qq.com','城市园林',20,'1','0','2002-03-10'),
                (24,'姜子牙','17799990023','caocao@qq.com','工程造价',29,'1','4','2003-05-26');
                
1.name字段为姓名字段,该字段的值可能会重复,为该字段创建索引
                create index idx_user_name on tb_user(name);
2.phone手机号字段的值,是非空,且唯一的,为该字段创建位移索引
                create unique index idx_user_phone on tb_user(phone);
3.为profession,age,status创建联合索引
                create index idx_user_pro_age_sta on tb_user(profession, age, status);
4.为email建立合适的索引来提升查询效率
                create index inx_user_email on tb_user(email);

SQL性能分析

SQL执行频率

MySQL客户端连接成功后,通过show[session|global]status命令可以提供服务器状态信息.通过如下指令,可以查看当前数据库的INSERT,UPDATE,DELETE,SELECT的访问频次
            SHOW GLOBAL STATUS LIKE 'Com_______'; // 7个下划线

// 见图 MySQL查询操作执行频率

慢查询日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time, 单位:秒, 默认10秒)的所有SQL语句的日志.

MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
#开启MySQL慢日志查询开关
            slow_query_log=1
#设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
            long_query_time=2
#配置完毕之后,通过以下指令重新启动MySQL服务器进行测试, 查看慢日志文件中记录的信息

           /var/lib/mysql/localhost-slow.log

profile详情

show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了,通过have_profiling参数,能够看到当前MySQL是否支持profile操作
SELECT @@have_profiling;
            默认profiling是关闭的,可以通过set语句在session/global级别开启profiling;
            set profiling=1;
# 查看每一条SQL的耗时基本情况
            show profiles;
# 查看指定query_id的SQL语句各个阶段的耗时情况
            show profile for query query_id;
# 查看指定query_id的SQL语句CPU的使用情况
            show profile cpu for query query_id;

未完...待更新 2023-10-07 18:16:56

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

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

相关文章

SAP配置BOM数据结构详解-整车(SAP配置BOM攻略十)

一、MBOM数据 1、一个产品由多个物料构成,每个物料构成MBOM的一行。 2、工程变更号在BOM数据中是必须的。变更号的实质是通过变更号指向某个生效日期。通过变更号关联的日期区间,可用决定这个物料数据是否启用。 二、特征数据 1、一个车可用分类为多个…

P1-P5_动手学深度学习-pytorch(李沐版,粗浅的笔记)

目录 预告  1.学习深度学习的关键是动手  2.什么是《动手学深度学习》  3.曾经推出的版本(含github链接) 一、课程安排  1.目标  2.内容  3.上课形式  4.你将学到什么  5.资源 二、深度学习的介绍  1.AI地图  2.深度学习在一些应用上…

【数据结构与算法】之“堆”介绍

目录 堆的基本存储 一、概念及其介绍 二、适用说明 三、结构图示 堆的 shift up 堆的 shift down 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 优化堆排序 索引堆及其优化 一、概念及其介绍 二、适用说明 三、结构图示 堆的基本存储 一、概念及其介…

SiegedSec 黑客组织袭击北约网络系统

Security Affairs 网站披露,一个名为 SiegedSec 的网络攻击组织近期成功入侵了北约网络系统,并在网上散布盗取的大量非机密文件。 目前,北约正在就此事展开积极调查,其所属官员发表声明表示,北约内部已经组织了大量的网…

智能导览与实时监测:数字孪生助力景区管理

在当今旅游业快速发展的背景下,景区“人流管理”成为了一个越来越重要的问题。数字孪生技术由于其自身优势,可以为景区管理者提供更智能、更高效的管理方案。本文结合山海鲸可视化几个数字孪生案例带大家一起了解数字孪生在景区人流管理方面的应用&#…

计算机竞赛 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

架构师选择题--计算机网络

架构师选择题--计算机网络 真题 真题 d http:80 https:httpssl :443 b b pop3是邮件接收协议:110 SMTP是邮件发送协议:25 http:80 A 网络隔离:防火墙(逻辑),网闸(物理) …

OpenCV4(C++) —— 图像数据类型转换和颜色模型转换

文章目录 一、图像数据类型转换二、颜色模型转换三、通道的分离和融合 一、图像数据类型转换 OpenCV中使用imread读取一张彩色图像时,默认采用的是BGR通道和整数类型(0-255,CV_8U)。 在某些情况下,会将整数类型(0-255)转换为浮点类型(0-1)&a…

助力电力行业数字化转型:智慧风电项目介绍

智慧电力作为电力领域的突破性进展,旨在实现能源领域的数字化转型。智慧电力借助数字孪生、IOT、云计算等技术,将传统的电力系统升级为高智能、高效能的系统,助力传统能源企业实现数字化转型。下面让我们来看一看山海鲸可视化提供的智慧电力相…

c#利用Chart 画图

c#利用Chart 画图 添加画图组件 编写代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; …

【网络安全-sql注入(5)】sqlmap以及几款自动化sql注入工具的详细使用过程(提供工具)

一,sqlmap 工具的详细使用 kali系统自带这个工具,无需安装直接sqlmap 后面接参数使用 Windows上参照以下方法安装即可 1-1 工具下载 1-1-1 sqlmap下载 sqlmap 工具下载地址: GitHub - sqlmapproject/sqlmap: Automatic SQL injection a…

6-6 两个有序链表序列的合并 分数 10

List Merge(List L1, List L2) {if (L1 NULL)return L2;if (L2 NULL)return L1;// 定义指针p和q分别指向链表L1和L2的头结点List p L1->Next;List q L2->Next;// 定义新链表的头结点和指针rList head (List)malloc(sizeof(struct Node));head->Next NULL;List r…

WinScope跟踪window/layer pb文件

WinScope web用来跟踪分析WindowManager或SurfaceFlinger在window转换期间和转换后的状态,跟踪记录会被写入 /data/misc/wmtrace/wm_trace.pb 和 /data/misc/wmtrace/layers_trace.pb,同时还会包含在错误报告中。 一、下载winscope.html curl https://a…

Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸

一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道,ui (图片)资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片,也是最占资源量的资源类型,游戏中的ui 资源还是人机交互的最重要的部分&#xff…

阿里影业+大麦,开启大文娱新纪元?

被“精心呵护”长达十年后,阿里大文娱在今年终于踏上了关键节点。 3月份,阿里“16N”组织大变革后,大文娱集团独自上路。8月,“分家”后的第一份财报显示,阿里大文娱集团成功大幅扭亏,实现了首次季度经调整…

ToBeWritten之狩猎恶意攻击者

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

如何下载修复xinput1_3.dll并避免常见错误 ,详解多种实用解决方法

在运行某些应用程序或游戏时,您可能会遇到xinput1_3.dll丢失或损坏的错误提示。这是由于操作系统缺少xinput1_3.dll文件所引起的。针对以上问题,我们提供了几种解决方法来修复这个问题。本文将详细介绍如何下载修复xinput1_3.dll,并提供一些建…

【LeetCode75】第六十六题 编辑距离

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们三种操作方式,插入一个字符,删除一个字符,替换一个字符。 问我们最少操作几次可以把字符串…

图形学中一些基本知识的总结与复习

前言 在过完games101课程后仍然觉得自己还有许多地方不懂与遗漏,以此来补充与复习一些其中的知识。 参考:Games101、《Unity Shader 入门精要》 GPU渲染流水线(GPU Rendering Pipeline) ----注:Games101课程中所展示渲染流程与书中有所不同&…

前端作业(17)

之后的20个作业&#xff0c;学自【20个JavaScript经典案例-哔哩哔哩】 https://b23.tv/kVj1P5f 支付倒计时 1. 支付10s倒计时 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…