MYSQL_

news2024/11/28 12:56:43

文章目录

  • ①. 索引的概述
  • ②. 二叉树和红黑树
  • ③. Hash建立索引结构
  • ④. B树的数据结构
  • ⑤. MyISAM存储引擎索引实现
  • ⑥. InnoDB索引实现(聚集)
  • ⑦. 联合索引的设定

①. 索引的概述

  • ①. 索引是帮助MySQL高效获取数据的排好序的数据结构

  • ②. mysql数据库的实现原理通过b+树实现的,b+树的原理是先找到所有的数据,然后折半找到中间的数据,比它小的放左边,大的放右边,形成一个树的结构,依次去进行折半,然后将剩余的数据再折半
    (索引底层实现原理b+树(二叉树),折半查找)

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

  • ③. 各个数据结构链接

②. 二叉树和红黑树

  • ①. 如果我们要查找89这个元素,经过两次IO就可以获取到(二叉树)
    在这里插入图片描述
  • ②. 这个时候我们以Col1为例,如果要查找6,会变成一种链表的形式,从001开始查看一直到006查看到为止(二叉树)

在这里插入图片描述

  • ③. 如果我们的索引底层使用的是红黑树,随着数量的增加,深度会非常大(不采取)
    在这里插入图片描述

③. Hash建立索引结构

  • ①. 在SQL中建立索引的时候,除了可以使用B+树的形式,还可以使用hash的方式
    在这里插入图片描述

  • ②. 对索引的key进行一次hash计算就可以定位出数据存储的位置

  • ③. 很多时候Hash索引要比B+ 树索引更高效

  • ④. 仅能满足 “=”,“IN”,不支持范围查询

  • ⑤. hash冲突问题

在这里插入图片描述

④. B树的数据结构

  • ①. 叶节点具有相同的深度,叶节点的指针为空

  • ②. 所有索引元素不重复

  • ③. 节点中的数据索引从左到右递增排列
    在这里插入图片描述

⑤. MyISAM存储引擎索引实现

  • ①. MyISAM索引文件和数据文件是分离的(非聚集)
    非聚集:如下面的15:0x07,通过这个0x07地址找到数据表中实际的数据,需要有回表的方式

在这里插入图片描述

  • ②. 我们使用MyISAM存储引擎有三种文件生成,第一个frm:表结构、MYD:表数据文件、MYI:表索引文件
    在这里插入图片描述

⑥. InnoDB索引实现(聚集)

  • ①. 聚集索引-叶节点包含了完整的数据记录
  1. 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
  2. 叶子节点包含所有索引字段
  3. 叶子节点用指针连接,提高区间访问的性能

在这里插入图片描述

  • ②. 为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键,而不用UUID?
  1. 如果没有建立主键,那么mysql会默认将建表的语句中的不重复的列作为主键储存b+树,如果所有列都有重复数据,MYSQL会自动创建一个列出来,建立B+树的关系。建立了主键,MYSQL就可以根据主键来展示B+树的数据结构。
  2. 使用UUID能让主键唯一,但是在比较时,数据很大,在底层比的是位,如果我们使用简单的主键自增,一下就比较好
  • ③. 谈谈你对B树和B+树区别?
  1. B+的data和索引全部在叶子节点,这样,可以储存更多的数据
  2. B树和B+树区别二,B+树有用指针链接,B树没有。试想,需要查询大于20的数据,那么B+树就可以根据折半查找找到20这个数据,再根据30储存的箭头找到49、50,依次这样下去。如果换做B树,查找49、50的时候,又需要重新进行扫描全表遍历

在这里插入图片描述

  • ④. 为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

在这里插入图片描述

⑦. 联合索引的设定

  • ①. 设置联合索引
    key ‘idx_name_age_position’ (‘name’,‘age’,‘position’) USING BTREE
    在这里插入图片描述
  • ②. 下面的只有第一条使用的索引
explain select * from employee where name='TANGZHI' and age=31;
explain select * from employee where age=30 and position='dev';
explain select * from employee where position='dev';

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

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

相关文章

docker安装redis,并挂载配置文件

1:下载镜像,不添加版本 默认下载最新的 docker pull redis下载成功后如图所示 2:下载redis配置文件,我是在docker中下载的,也可以使用文件上传工具将配置文件上传到自己指定的目录。 首先需要安装wget,否…

第一章 USB应用笔记之USB初步了解

USB应用笔记之USB初步了解 文章目录 USB应用笔记之USB初步了解前言USB的优点:USB版本发展USB速度以及电气接口USB传输过程USB开发抓包工具:USB传输方式1.控制传输特点:2.中断传输的特点3. 批量传输的特点4.实时传输(同步传输)的特…

同步与互斥

硬件指令 实现互斥:硬件指令,硬件实现的原子操作,不会被打断 tsl指令和xchg指令 当前指令执行完,才会检测中断 If the signal comes while an instruction is being executed, it is held until the execution of the instructi…

Feign负载均衡写法

Feign主要为了面向接口编程 feign是web service客户端,是接口实现的,而ribbon是通过微服务名字访问通过RestTemplate调用的,如下: 在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(类似…

仿京东 项目笔记2(注册登录)

这里写目录标题 1. 注册页面1.1 注册/登录页面——接口请求1.2 Vue开发中Element UI的样式穿透1.2.1 ::v-deep的使用1.2.2 elementUI Dialog内容区域显示滚动条 1.3 注册页面——步骤条和表单联动 stepsform1.4 注册页面——滑动拼图验证1.5 注册页面——element-ui组件Popover…

开开心心带你学习MySQL数据库之第三篇上

学校的项目组有必要加入吗? 看你的初心. ~~如果初心是通过这个经历能够提高自己的技术水平 ~~是可以考虑的 ~~如果初心是通过这个经历提高自己找工作的概率 ~~这个是不靠谱的,啥用没有 ~~如果初心是通过这个体验更美好的大学生活 ~~靠谱的 秋招,应届生,找工作是非常容易的!!! …

《开发实战》13 | 用好Java 8的日期时间类,少踩一些“老三样”的坑

13 | 用好Java 8的日期时间类,少踩一些“老三样”的坑 初始化日期时间 如果要初始化一个 2019 年 12 月 31 日 11 点 12 分 13秒这样的时间,Date date new Date(2019, 12, 31, 11, 12, 13);输出的时间是 3029 年 1 月 31 日 11 点 12 分 13 秒&#xf…

时间语义与窗口

时间语义 在Flink中,时间语义分为两种 : 处理时间和事件时间。时间语义与窗口函数是密不可分的。以窗口为单位进行某一段时间内指标统计,例如想要统计8点-9点的某个页面的访问量,此时就需要用到了窗口函数,这里的关键…

【倒着考虑】CF Edu 21 D

Problem - D - Codeforces 题意: 思路: 这道题需要倒着步骤考虑,就是先去假设已经分为了两部分,这左右两部分的和相等,然后去想上一个步骤 倒着一个步骤后,可以发现这样的性质: Code&#xf…

2023谷歌开发者大会直播大纲「终稿」

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

【小沐学Python】UML类图的箭头连线关系总结(python+graphviz)

文章目录 1、简介1.1 类图1.2 Graphviz 2、Graphviz2.1 安装2.2 命令行测试2.3 python测试 3、关系3.1 实现3.2 泛化3.3 关联3.4 依赖3.5 聚合3.6 组合 结语 1、简介 UML(unified modeling language,统一建模语言)是一种常用的面向对象设计的…

java-参数传递机制

java参数传递机制都是值传递。 基本类型参数传输都是数据值。 传递到方法中的值是拷贝后的值。 引用类型参数传输的都是地址值。 如果是数组的参数传递,那么是引用传递(本质上还是值传递,但是由于数组的值传递是传递数组的内存地址&#xf…

如何使用『Nginx』配置后端『HTTPS』协议访问

前言 本篇博客主要讲解如何使用 Nginx 部署后端应用接口 SSL 证书,从而实现 HTTPS 协议访问接口(本文使用公网 IP 部署,读者可以自行替换为域名) 申请证书 须知 请在您的云服务平台申请 SSL 证书,一般来说证书期限…

数据结构(Java实现)-Map和Set

搜索树 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也…

JavaScript运行机制与实践应用

一、JavsScript运行机制 1、JavaScript 是一种解释型语言,它的执行机制主要包括以下几个步骤: 2、事件循环 3、JavaScript运行模型 4、JavaScript任务 5、JavaScript宏任务和微任务 6、案例分析 console.log(script start) setTimeout(function () {co…

DB-GPT使用

一、源码安装 安装 请按照以下步骤安装DB-GPT 1. Hardware Requirements 如果你的显存不够,DB-GPT支持8-bit和4-bit量化版本 2. Install git clone https://github.com/eosphoros-ai/DB-GPT.git目前使用Sqlite作为默认数据库,因此DB-GPT快速部署不…

PixelSNAIL论文代码学习(2)——门控残差网络的实现

文章目录 引言正文门控残差网络介绍门控残差网络具体实现代码使用pytorch实现 总结 引言 阅读了pixelSNAIL,很简短,就用了几页,介绍了网络结构,介绍了试验效果就没有了,具体论文学习链接 这段时间看他的代码,还是挺痛…

【数学建模竞赛】Matlab逻辑规则,结构基础及函数

逻辑基础 逻辑变量 在Matlab中,逻辑变量是一种特殊类型的变量,用于表示逻辑值。逻辑变量只有两个可能的值:true(真)和false(假)。在Matlab中,我们可以使用0和1来表示逻辑变量的值。…

数据结构(Java实现)-字符串常量池与通配符

字符串常量池 在Java程序中,类似于:1, 2, 3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、更节省内存,Java为8种基本数据类型和String类都提供了常量池。…

Excel_VBA程序文件的加密及解密说明

VBA应用技巧及疑难解答 Excel_VBA程序文件的加密及解密 在您看到这个文档的时候,请和我一起念:“唵嘛呢叭咪吽”“唵嘛呢叭咪吽”“唵嘛呢叭咪吽”,为自己所得而感恩,为付出者赞叹功德。 本不想分享之一技术,但众多学…