Database__进阶

文章目录

😊 @ 作者:Lion J
💖 @ 主页: https://blog.csdn.net/weixin_69252724?spm=1000.2115.3001.5343
🎉 @ 主题: 数据库mysql(高级部分)
⏱️ @ 创作时间:2024年01月24日
————————————————

文章目录

  • 文章目录
  • 一、mysql的服务架构?
    • 1. 连接层
    • 2. 服务层
    • 3. 引擎
    • 4. 物理文件层
  • 二、引擎
  • 三、索引
    • 1.概念
    • 2.索引的原理
    • 3. 索引的优劣势
    • 4. 索引的分类
      • 1> 主键索引
    • 2>单值索引
      • 3>唯一索引
      • 4>组合索引(复合索引)
      • 5>全文索引
    • 5. 索引的数据结构
    • 6. 聚簇索引与非聚簇索引
      • **innodb反例:**
      • **myisam反例:**
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、mysql的服务架构?

服务架构是mysql的骨架结构, 分为连接层, 服务层, 引擎层, 数据文件层

1. 连接层

连接层主要用于处理与客户的连接,授权认证,以及安全认证

2. 服务层

完成sql服务的核心服务, 如相关的sql接口, 以及数据的缓存, sql的分析, 以及内置函数的执行, 是否利用索引查询

3. 引擎

负责与文件层进行交互操作, 是否支持索引, 锁定水平…

4. 物理文件层

在文件系统(硬盘)上存储数据, 日志


二、引擎

1. 概述

在mysql中用到的存储机制, 是否支持索引, 支持的锁定水平等各种功能技术, 不同的技术与配置方式叫做引擎

2. 两种主要引擎
●InnoDB

●MyISAM


三、索引

在数据量大(万级数据)可以高效的查询数据

1.概念

数据库中维护的特定查找算法的数据结构叫做索引, 他是一种排好序的快速查找的数据结构

2.索引的原理

类似与书上的目录, 不用再寻找书中的数据时每次一页一页的翻, 可以直接通过目录来减小数据的范围,逐渐筛选出结果, 做到高效查找自己想要的数据;

图例:
在这里插入图片描述

将数据库中的数据与索引库中的数据一一对应, 提高检索效率

3. 索引的优劣势

●优势

  1. 索引可以快速的提高检索效率,降低数据库的IO成本(从系统文件上读取)
  2. 索引对查询纪录结果进行排序, 分组, 降低原本mysql结果排序对CPU的消耗

●劣势

  1. 由于创建索引之后, 索引相当一张表, 保存主键与索引字段,以及指向实体表的纪录的物理地址, 会占用磁盘空间
  2. 数据的增删改不仅会改变实体表的纪录, 还会改变索引关系表(索引树)的纪录, 所以会降低更新表数据的速度,造成实际业务的拖延,增加数据库压力

4. 索引的分类

这里以mysql数据库为例

1> 主键索引

顾名思义就是将表中的主键当作索引列, 数据库会自动再主键上添加索引

语句

#增加
alter table [表名] add primary key
#删除
alter table [表明] drop primary key

在这里插入图片描述

2>单值索引

可以给某一列添加索引, 就是最常用索引

语句

#添加
create index 索引名 on 表名(列名)
#删除
drop index 索引名 on 表明

如:create idnex admin_account_index on admin(account)

在这里插入图片描述

单值索引查询效率比主键索引性能低

原因: 主键索引的值在整个表中必须是唯一的,这使得数据库可以更快地定位到特定的行。相比之下,单值索引可能不保证唯一性,因此查询可能需要检查更多的行

3>唯一索引

唯一索引这里的唯一指的是这一列的纪录是唯一的, 可以想象成主键索引的低配版, 列里的值允许null

语句

create unique index on 表名(列名)
drop index 索引名 on 表名

唯一索引与前面例子类似,唯一就是要求


4>组合索引(复合索引)

●概念

组合索引可以想象为多个单值索引, 但是总体来说, 组合索引比多个单值索引的开销更小, 当行数远远大于列数时候, 可以适当的添加组合索引

语句

create index on 表名(列名,列名,列名)
drop index on 表明

●组合索引最左前缀原

假如有三个列abc,添加组合索引ab, 那么在将组合索引的列作为查询条件时, 必须要出现最左侧列, 不然组合索引不生效

演示
(应该叫组合索引, 图中口误🤣)

这是组合索引生效例子

组合索引失效

在这里插入图片描述

5>全文索引

由于mysql在模糊查询时候, 一般的索引都不生效, 所以有专门应对该问题产生了全文索引

语法

CREATE FULLTEXT INDEX 索引名 ON 表名(字段名) WITH
create fulltext index 索引名 on 表明(列) preset

图示:

先使用单值索引, 索引列名name

在这里插入图片描述

再使用全文索引
在这里插入图片描述
注意:

在使用全文索引时,进行模糊查询语法稍微不一样
SELECT 结果 FROM 表名 WHERE MATCH(列名) AGAINST(‘搜索词’)

5. 索引的数据结构

索引数据结构是B+树的结构

为什么不能是二叉树?
因为数据库里的主键一般都是自增的, 而根据二叉树的性质知道, 此时的索引树将会向一边倾斜, 导致高度非常高(和链表一样), 反而查询效率更慢

为什么不能是红黑树?
红黑树虽然可以通过子旋转,但是还是会向一边来加元素, 问题同上

用B+树,非叶子结点上放数据的索引, B+树的性质刚好可以让一个非叶子结点放大量的索引;而将数据放到一个个的叶子结点里,所有叶子结点(数据之间有链指针)

这样可以在全表扫描时,查询某一索引时,快速锁定该索引, 再向下获取该索引对应数据
在sql范围查询时, 也可以通过链指针快速得到范围内的数据

图示:
在这里插入图片描述

6. 聚簇索引与非聚簇索引

●聚簇索引:

只在执行sql查询操作时, 可以通过索引直接获取数据, 比如InnoDB里的主键索引(一级索引)

聚簇是设计: InnoDB,索引与数据如下
在这里插入图片描述
在这里插入图片描述

●非聚簇索引:

指的是,索引存储与数据存储是分离的, 比如在Myisam引擎,
>索引与数据关系如下
在这里插入图片描述

innodb与myisam虽然聚簇式设计与非聚簇式索引, 但是并不代表查询时候的索引都是聚簇索引与非聚簇索引,仅仅是根据两种思想设计的

innodb反例:

如一个表 字段 a(主键),b,c,字段c(单值索引)

selelct b,c from test where c = 33
该sql通过c的索引树查询到的索引结点数据是主键id, 再需要通过主键id重新查询一下,该sql查询中, c索引就是非聚簇索引

myisam反例:

例子同上

select id from test where id = 1
该种查询就直接查询到对应的索引结点,再通过索引结点直接获取内存里的数据物理地址

总结

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

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

相关文章

TortoiseSVN源码安装与迁移全攻略

一、前言 随着版本控制系统的普及,越来越多的开发者和团队开始使用SVN(Subversion)来管理代码。本文将详细介绍TortoiseSVN的源码安装及迁移过程,帮助您轻松掌握这一版本控制工具。 二、TortoiseSVN源码安装 依赖环境安装&…

thymeleaf常用语法大全

有时候需要借鉴别人的代码,发现一个相似的功能点,但是自己的是html页面别人的是jsp页面,那如果不了解thymeleaf的话还是要费点功夫的。 什么是thymeleaf,通俗点,jsp中的${},以及jstl中的if标签什么的都不能用&#xf…

使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG

原理 LlamaIndex的文档链接:Using LLMs - LlamaIndex 🦙 0.9.33 LlamaIndex 的一般使用模式如下: 加载文档(手动或通过数据加载器)将文档解析为节点构建索引(来自节点或文档)(可选,高级&…

2024年 IT 行业就业情况能否回春?很多人说道…

我只能说可以,以前我是看不到的。但是鸿蒙全栈自研让我重新看到希望! 2024年1月18日,华为鸿蒙千帆启航发布会。讲到HarmonyOS NEXT作为原生鸿蒙,其系统底座全栈自研,去掉了传统的AOSP 代码(“Android 开放…

【latex】在Overleaf的IEEE会议模板中,快速插入参考文献

【LaTeX】在Overleaf的IEEE会议模板中,快速插入参考文献 写在最前面第一步:在文献检索网站导出引用文献的bib文件第二步:编辑overleaf模版方法二:EduBirdie生成参考文献(补充)使用LaTeX在Overleaf的IEEE会议…

杰卡德距离(Jaccard Distance)

杰卡德距离(Jaccard Distance),是用于衡量两个集合差异性的一种指标,它是杰卡德相似系数的补集,可以用来区分集合(如知识图谱)。 杰卡德相似系数 杰卡德相似系数(Jaccard similari…

80.网游逆向分析与插件开发-背包的获取-自动化助手显示物品数据

内容参考于:易道云信息技术研究院VIP课 上一个内容:升级Notice类获得背包基址-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:3be017de38c50653b1…

【MATLAB源码-第124期】基于matlab的GFDM系统(64QAM/QPSK调制)在AWGN和PA信道误码率对比。

操作环境: MATLAB 2022a 1、算法描述 广义频分复用(GFDM)是一种先进的信号调制技术,近年来在无线通信领域获得了广泛的关注。GFDM作为一种多载波调制方案,是对经典的正交频分复用(OFDM)技术的…

Java内存模型

主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量包括实例变量、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为局部变…

什么是DMA?DMA究竟有多快!

原文来自公众号:工程师看海 直接内存访问(Direct Memory Access,DMA):在计算机体系结构中,DMA 是一种数据传输方式,允许外部设备直接访问计算机的内存,而无需通过中央处理单元&#…

网络防御保护---防火墙USG6000V接口配置实验

一、实验拓扑 二、实验要求 1.防火墙向下使用子接口分别对应生产区和办公区 2.所有分区设备可以ping通网关 三、实验思路 1、配置各设备的IP地址 2、划分VLAN及VLAN的相关配置 3、配置路由及安全策略 四、实验配置 4.1、配置各设备IP地址 PC1配置 Client1配置 PC2配置…

maven搭建编程环境

Maven – Download Apache Mavenmaven下载官网地址下载后解压,配置系统环境变量, 新建系统变量,在系统path中配置%MAVEN396_HOME%\bincmd中输入mvn -version查询是否成功配置本地仓库地址 创建一个本地文件夹当做本地仓库,名字可以…

应用机器学习的建议 (Advice for Applying Machine Learning)

1.决定下一步做什么 问题: 假如,在你得到你的学习参数以后,如果你要将你的假设函数放到一组 新的房屋样本上进行测试,假如说你发现在预测房价时产生了巨大的误差,现在你的问题是要想改进这个算法,接下来应…

CMS如何调优

业务JVM频繁Full GC如何排查 原则是先止损,再排查。 FGC的原因是对象晋升失败或者并发模式失败,原因都是老年代放不下晋升的对象了。 1.可能是大对象导致的内存泄漏。快速排查方法:观察数据库网络IO是否和FGC时间点吻合,找到对应…

碳排放预测 | Matlab实现LSTM多输入单输出未来碳排放预测,预测新数据

碳排放预测 | Matlab实现LSTM多输入单输出未来碳排放预测,预测新数据 目录 碳排放预测 | Matlab实现LSTM多输入单输出未来碳排放预测,预测新数据预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现LSTM长短期记忆神经网络多输入单输出未来…

推荐收藏!48道数据分析师高频面试题汇总!

大家好,最近很多小伙伴私信我,讲一下数据分析的面试题,今天给大家整理了48道数据分析师面试时被频繁问到的题目,找数据分析岗位的同学一定要码住认真看。 想了解最新的面试动态、最新高频考点、技术交流的同学,可以文…

别不信❗️你离数据专家只差一个CDMP证书

1⃣️为什么选择CDMP证书? 🌟🌟亲爱的朋友们,如果你在寻找一个能让你在数据管理领域大展拳脚的证书,那么CDMP(Certified Data Management Professional)证书就是你的不二之选!&#…

西瓜书读书笔记整理(十二) —— 第十二章 计算学习理论(上)

第十二章 计算学习理论(上) 12.1 基础知识12.1.1 什么是计算学习理论(computational learning theory)12.1.2 什么是独立同分布(independent and identically distributed, 简称 i . i . d . i.i.d. i.i.d.&#xff0…

一键拥有你的GPT4

这几天我一直在帮朋友升级ChatGPT,现在已经可以闭眼操作了哈哈😝。我原本以为大家都已经用上GPT4,享受着它带来的巨大帮助时,但结果还挺让我吃惊的,还是有很多人仍苦于如何进行升级。所以就想着写篇教程来教会大家如何…

响应拦截器的 return Promise.reject(res.data.message)

今天在看老师讲解代码的时候,解决了我心中的一些疑惑。 在做excel文件导出的时候,没有告诉浏览器文件的格式是Blod产生了报错。 看下图: 可以看到下面的内容:如果业务成功 返回 res.data 如果业务失败,给出错误信息的提示,将这个错误抛出去。 因此我们在发送一个…