当前位置: 首页 > news >正文

MySql存储引擎与索引

MySql引擎

存储引擎是具体操作数据的地方,是一种对数据存储的技术与其配套的功能

不同存储引擎所采用存储的方式的不同,并且索引技巧与锁定水平也不同

根据业务的需求灵活的选择存储引擎即可满足的实际的需要

Innodb

        Innodb是MySql中的默认安装的引擎,并且每张表默认使用的引擎就是的Innodb

        Innodb支持事务,支持外键,支持全文索引,行级锁,支持主键自增,不存储数据库中的总记录数

        运行时会在内存中建立缓存,缓存数据与索引

MyISAM

        MyISAM也是MySql中默认安装的引擎

        MyISAM不支持事务,不支持外键,支持全文索引,表级锁,存储表的总记录数量

        更新操作时效率低,但是读取的性能高

索引

引入

        Mysql中的数据在文件系统中存储是存储在数据页上的,并且一页数据最多能存储16k的数据

        如果需要读取数据页中的一条数据,那么则需要一条一条查询比对才能,找到查询的数据

        这么做的效率非常低,并且I/O的次数也非常高

索引

        索引就是帮助MySql进行高效查询的数据结构

        索引实际上是一棵树,树上的结点存储索引的键值与物理地址的指针

        查询时通过索引去找到数据对应的位置

优点

        数据检索的效率变高,能够快速定位,降低I/O的次数

        降低数据排序的成本

缺点

        索引实际上存储的是一张实体表,需要占用空间

        更新数据的同时也需要维护索引,导致性能降低

分类

主键索引

        主键索引是默认创建的,在设置主键之后,创建表时会默认创建的该索引,这也是为什么查询都尽量使用主键作为条件的原因

        新增主键索引:

        ALTER TABLE 表名 add PRIMARY KEY 表名(列名);

        删除主键索引:

        ALTER TABLE 表名 drop PRIMARY KEY ;

单值索引

        对非主键的单个列创建索引,一个表中可以有多个单列索引

        创建单值索引

        CREATE INDEX 索引名 ON 表名(列名);

        删除索引:

        DROP INDEX 索引名;

唯一索引

        对一列唯一的值创建索引,允许值为null

        创建唯一索引

        CREATE UNIQUE INDEX 索引名 ON 表名(列名);

        删除索引

        DROP INDEX 索引名 ON 表名;

组合索引

        组合索引表示对多列的值创建索引,可以同时使用多列的值作为条件进行查询

        创建单值索引

        CREATE INDEX 索引名 ON 表名(列名1,列名2,列名3.....);

        删除索引:

        DROP INDEX 索引名;

最左前缀原则

        该原则是在使用该索引进行检索的时候需要遵守的

        该原则要求检索条件带有索引最左侧的列的值,否则索引失效

        例如CREATE INDEX test_index ON test(a,b,c);

        select * from test where a = 11 and b =11

        select * from test where a = 11 and c =11

        select * from test where b = 11 and a =11

        以上情况索引都是生效的

        select * from test where b = 11 and c =11 ,当查询条件中没有a时失效

索引数据结构

        索引的底层采用B+树的数据结构,在B+树之前我们首先排除掉了二叉树与红黑树

        二叉树与红黑树在结点内只能存储一个数据,虽然红黑树可以自平衡,但是还是会出现树高过高的情况,这样就会导致检索的效率变低。

        B树的特点: 自平衡的多路树,一个结点内存储多个数据(横向拓展),非叶子节点不存储数据,只存储索引,数据放在叶子结点中

        B+树的特点:自平衡的多路树,一个结点内存储多个数据(横向拓展),非叶子节点不存储数据,只存储索引,数据放在叶子结点中,并且叶子结点中会有指针连接,

        B+树底层的链表对与自增的主键的检索比较方便,而且能够提高范围内检索的效率

聚簇索引与非聚簇索引

聚簇索引

        聚簇索引的索引值与数据是存放在一起的,根据索引值查询数据可以直接查询到表中的数据

        例如,根据主键查数据,查询到叶子结点就相当于查到的了数据

        在Innodb引擎中大部分查询的方式都是聚簇索引的方式,并且索引与数据是存放在一个文件中的

非聚簇索引

        非聚簇索引的索引值与数据是分开存放的,根据索引值查询到的是数据的映射

        非聚簇索引例如在非主键的索引查询多条数据的话,会根据索引查询到主键值,再根据主键索引回表查询到对应的数据,在Innodb中非主键的索引就是使用的该策略,该场景下是非聚簇式的索引。

        非聚簇的索引,索引存储的是物理空间上的地址,会直接指向数据存放的位置

        在MyISAM引擎中大部分查询的方式都是非聚簇索引的方式,并且索引与数据是分开存放在两个文件中的

相关文章:

MySql存储引擎与索引

MySql引擎 存储引擎是具体操作数据的地方,是一种对数据存储的技术与其配套的功能 不同存储引擎所采用存储的方式的不同,并且索引技巧与锁定水平也不同 根据业务的需求灵活的选择存储引擎即可满足的实际的需要 Innodb Innodb是MySql中的默认安装的引擎…...

typing库

typing 库 引入 在日常代码编写中,由于python语言特性,不用像go等编译性语言一样,在定义函数时就规范参数和放回值的类型。 def demo(a, b):return "ab" 此时 a 和 b 可以传入任意类型参数毫无疑问,这一特性&#…...

linux shell 入门学习笔记10内置shell命令

bash基础的内置命令 echoevalexecexportreadshift echo命令 -n 不换行输出 -e 解析字符串中的特殊符号\n 换行 \r 回车 \t 制表符 四个空格 \b 退格-n参数演示 xiao123xiao123:~/Downloads$ echo 你真胖;echo 你还挺可爱; 你真胖 你还挺可爱 xiao123xiao123:~/Downloads$ ec…...

[动手写操作系统]-02-开机运行系统并打印‘hello‘

文章目录 理解三个概念: 中断interrupts, CPU,寄存器registers 目标:让上一个静默的界面打印一些文本 我们将改进我们的无限循环引导扇区并在屏幕上打印一些东西。我们将为此提出中断。 我们尝试将"Hello"写到寄存器al, 字节0x0e写到ah (the higher part of ax),并…...

Delete `␍`eslint(prettier/prettier) in vscode 的解决方案

错误描述从 Github 仓库拉取代码,使用 vscode 打开,页面报错,每一行都爆红 (如下图)问题原因由于历史原因,windows下和linux下的文本文件的换行符不一致。Windows在换行的时候,使用了换行符CRLF…...

gof23 设计模式 各个模式代码demo

Gof23 设计模式,也叫Gang of Four(GoF)设计模式,是由四位设计模式大师(Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)撰写的一本书——《设计模式:可复用面向对象软件的基础》所…...

0 初识Kotlin

0 基本介绍 相信很多开发者对Kotlin还是比较陌生的。 Kotlin是一种新型的编程语言,由JetBrains公司开发与设计,在2012年开源, 但没引起什么注意。 直到2017年google宣布将Kotlin作为Android开发的首选语言,Kotlin才开始大放异彩。…...

阿里云服务器部署SpringBoot+Vue项目(宝塔面板傻瓜式操作)

准备工作 一台服务器(我用的是阿里云)SpringBoot项目的jar包Vue项目的dist包 一、购买服务器 然后重置实例密码。 远程连接 登陆成功后安装宝塔面板 二、安装宝塔面板(无账号的注册一个账号) 地址:https://www.bt.cn/new/download.html 选择对应的镜像、不知道…...

27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)

目录[27. 移除元素-力扣](https://leetcode.cn/problems/remove-element/description/?languageTagsc)[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)[88. 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-…...

什么时候用std::move()?

文章目录1. "是什么?"2. "有何用?"3. "什么时候用?"1. “是什么?” 虽然 std::move() 从技术角度上是一个函数 ,但我认为它不是真正的函数。 它是编译器考虑表达式值的方式之间的转换器。 2. “有何用?” 首先要注意的是 std…...

建立做机器学习项目的范式

建立起做机器学习项目的范式,萃取出核心步骤,避免后面做项目没有明确的方向。 核心步骤: 1、明确自己想做什么样的项目,感兴趣的领域; 2、找到满足项目的数据集,开源的或者自建数据集; 数据…...

搭建k8s高可用集群—20230225

文章目录多master(高可用)介绍高可用集群使用技术介绍搭建高可用k8s集群步骤1. 准备环境-系统初始化2. 在所有master节点上部署keepalived3.1 安装相关包3.2 配置master节点3.3 部署haproxy错误解决3. 所有节点安装Docker/kubeadm/kubelet4. 部署Kuberne…...

Java 修饰符和多态

文章目录一、修饰符1. 权限修饰符2. 状态修饰符2.1 final2.2 static二、多态1. 成员访问特点2. 多态中的转型3. 多态案例一、修饰符 1. 权限修饰符 2. 状态修饰符 2.1 final final 关键字是最终的意思,可以修饰成员方法、成员变量及类。 //1.修饰成员变量 publi…...

学了一年Java的我,想转嵌入式了

秋名山码民的主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平有限,如发现错误,还请私信或者评论区留言! 目录前言为啥我想去转行?如果我现在选择转硬件,我…...

【Git】Git冲突与解决方法

目录 一、Git冲突如何产生? 二、解决Git冲突—手动修改冲突 【第一步】在 hot-fix 分支上增加如下代码,并且提交。 【第二步】在master 分支上同样的地方增加如下代码,并且提交。 【第三步】 我们现在在 master 分支上合并 hot-fix 分支&a…...

深度剖析数据在内存的存储

目录1.深度剖析数据在内存的存储(前言)数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端练习总结1.深度剖析数据在内存的存储(前言) 今天就让我戴佳伟给大家讲一下数据在内存中的存储。之中有好多让我们深思的点,大家都拿起笔记本,…...

身高排序(绝对值大的排后面,小的排前面)

题目描述 小明今年升学到了小学一年级&#xff0c;来到新班级后&#xff0c;发现其他小朋友身高参差不齐&#xff0c;然后就想基于各小朋友和自己的身高差&#xff0c;对他们进行排序&#xff0c;请帮他实现排序 输入描述 第一行为正整数H和N 0 < H < 200 为小明的身高…...

高频前端面试题之HTML篇(三)

11. label的作用是什么&#xff1f;是怎么用的&#xff1f; label元素不会向用户呈现任何特殊效果&#xff0c;但是&#xff0c;它为鼠标用户改进了可用性&#xff0c;当我们在label元素内点击文本时就会触发此控件。也就是说&#xff0c;当用户选择该标签时&#xff0c;浏览器…...

使用DG备份恢复测试库的流程以及可能出现的问题

使用DG备份恢复测试库的流程以及可能出现的问题 评估数据量和服务器存储空间从DG备库备份全库和归档日志清理测试库环境测试库恢复备份(一)从DG主库备份控制文件测试库恢复备份(二)从DG备库备份最新的归档日志测试库恢复备份(三)需要单独备份数据文件的情况思路:从DG备库…...

Springboot注释解析

SpringBootApplication 标注主程序类 说明一个spring boot应用 SpringBootConfiguration 标注为spring boot配置类 EnableAutoConfiguration 开启自动配置功能 AutoConfigurationPackage 自动配置包 Import({Registrar.class}) 导入一个容器到组件 Registrar.class&#xf…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...