2、MySQL索引

Chkdsk误删文件?5步教你从FOUND.000文件夹找回重要数据(附工具推荐) 本文详细介绍了当Chkdsk误删文件后,如何从FOUND.000文件夹中找回重要数据的5个步骤。包括理解Chkdsk与FOUND.000的关系、定位与访问FOUND.000文件夹、手动恢复CHK文件的技巧、使用UnCHK工具自动化恢复以及预防数据丢失的关键措施。适用于Windows用户解决数据丢失问题,特别是NTFS文件系统下的文件恢复。 阅读详情

索引数据结构

二叉树

  • 特点:左小右大。二分查找法(折半查找法)
  • 缺点:极端情况下会转化成链表,查询效率低下
    在这里插入图片描述

平衡二叉树

  • 特点:主要解决二叉树变成来链表的问题,具有二叉查找树的全部特性,左叶子树永远比右叶子树高至少1节,
  • 缺点:极端情况下可能右叶子树只有一个节点,左叶子树有n多个节点,
    在这里插入图片描述

红黑树

特点:

  1. 每个节点非红即黑。
  2. 根节点是黑色。
  3. 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
  4. 如果一个节点是红色的,则它的子节点必须是黑色的。
  5. 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(主要目的降低树的高度)
    在这里插入图片描述

B Tree

特点:

  1. 在红黑树的基础上,每个节点存储多条数据,已降低数据的高度,
  2. 结点中的所有数据不重复,节点中的所有数据从左到右依次递增
  3. 每一个索引数据会关联一个data(数据库的中的整条数据)
  4. 范围查找时需要从根节点重新定位索引。
    在这里插入图片描述

B+Tree

特点:

  1. 父子级节点数据之间数据会冗余
  2. 非叶子节点不存储data数据,非叶子节点可以存储更多数据
  3. 叶子节点用指针连接,提高区间访问性能
  4. Mysql中的B+树在原有B+树的基础又做啦优化,将叶子节的单链表优化为双链表。
    在这里插入图片描述

关于tree数据结构有一个不错的学习网站推荐给大家

Hash

  对索引的key进行一次hash计算就可以定位出数据存储的位置,hash冲突的解决方式和hashmap一样,也是通过数组加链表
  定值查询比任何树形数据结构都要快,唯一但也是致命的缺陷就是不支持范围查找

索引类型

聚簇索引和非聚簇索引

  • 聚簇索引:将数据存储与索引放到了一块、并且是按照一定的顺序组织的,找到索引也就找到了数据,数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的
  • 非聚簇索引:叶子节点不存储数据、存储的是数据行地址,也就是说根据索引查找到数据行的位置再取磁盘查找数据,这个就有点类似一本书的目录,比如我们要找第三章第一节,那我们先在这个目录里面找,找到对应的页码后再去对应的页码看文章

联合索引

  1. 按照索引的创建顺序,多个字段合并在一个节点中,只支持按照字段顺序查找,跳字段查询,索引失效。
  2. 最左前缀原则在这里插入图片描述

密集索引和稀疏索引

  • 密集索引:
    叶子节点保存的不只是键值,还保存了位于同一行记录里的其他列的 信息,由于密集索引决定了表的物理排列顺序,一个表只有一个物理排列顺序,所以一个表只能创建一个密集索引。

  • 稀疏索引:
    叶子节点仅保存了键位信息以及该行数据的地址,有的稀疏索引只保存了键位信息机器主键。
    mysam存储引擎,不管是主键索引,唯一键索引还是普通索引都是稀疏索引,innodb存储引擎:有且只有一个密集索引。所以,密集索引就是innodb存储引擎里的聚簇索引,稀疏索引就是innodb存储引擎里的普通二级索引。

覆盖索引/索引覆盖

  InnoDB存储引擎支持覆盖索引(covering index,或称索引覆盖),
  从辅助索引中就可以得到查询的记录,而不需要查询聚集索引中的记录。使用覆盖索引的一个好处是辅助索引不包含整行记录的所有信息,大小要远小于聚集索引,因此可以减少大量的IO操作。所以覆盖索引可以视为索引优化的一种方式,而并不是索引类型的一种。

三星索引

  • 索引将相关的记录都放到一起(放在一个磁盘页中)则获得一星;
  • 如果索引中的数据顺序和查找中的排列顺序一致则获得二星;
  • 如果索引中的列包含了查询中需要的全部列则获得三星。

索引类型总结

  从数据结构角度可分为B+树索引、哈希索引、以及FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了)和R-Tree索引(用于对GIS数据类型创建SPATIAL索引);

  从物理存储角度可分为聚集索引、非聚集索引;

  从逻辑角度可分为主键索引、普通索引,或者单列索引、多列索引、唯一索引、非唯一 索引等等

存储引擎

Myisam引擎

  1. 主键索引类型属于非聚集索引,索引和数据文件时分开存储的,不支持事务,不支持行锁,只有表锁。比较使用的业务:
  2. MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自动给涉及的表加写锁。

innoDB引擎

  1. 主键索引类型属于聚集索引,索引和数据放在一起,定位到索引时可以直接获取下面的data。
  2. 支持事务
  3. InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁,因为有mvcc机制。但是update、insert、delete操作会自动给涉及的行加写锁。

为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?
  innoDB表没有主键的话会挨个遍历表中所有的列,找出一列没有重复数据的列作为主键创建主键索引,如果没有符合要求的列,mysql会自己维护一个隐藏的自增列来创建主键索引。
  推荐使用整形的自增主键是因为和uuid相比,整形占空间小,每个节点可以存储更多索引,自增的主要原因是因为自增是有序的,B+树不需要每次都左旋右旋来维护平衡,uuid无需,每次都需要通过左旋和右旋来维护树的平衡。

为什么非主键索引结构叶子节点存储的是主键值?

  1. 节省存储空间;
  2. 保证一致性方便维护,数据中非索引列需要修改时,只修改主键索引中的data就可以。
OpenCV实战:高效检测与识别多类型条码与二维码 本文详细介绍了如何利用OpenCV的BarcodeDetector和QRCodeDetector模块,高效实现EAN-13条形码与常见二维码的检测与识别。内容涵盖从环境搭建、单码识别到处理多二维码的完整流程,并分享了提升识别率的图像预处理与性能优化等实战技巧,帮助开发者一站式解决视觉项目中的条码识别需求。 阅读详情

相关推荐

Windows 64 位系统下安装配置 DOSBox 及 debug.exe

该篇博客同样作为类似问题 “如何在 Windows 64 位系统下进入 debug” 的答案。 很多同学初看王爽的《汇编语言》,或者因为其它原因需要进入 debug 调试模式下学习汇编语言的时候,会发现进入不了,出现类似以下的错误提示。 这是因为他们使用的是 64 位的 Windows 系统(Win 7,Win 8 以及 Win 10 等),而 64 位 Windows 系统不再支持在命令提示符窗口下进入 debug 调试模式。那么对于使用 64 位 Windows 系统的用户来说,该怎样才能够顺利进入 d

加号减减号的博客 5万+

密集索引和稀疏索引的区别

密集索引和稀疏索引的区别 a)密集索引文件中的每个搜索码值都对应一个索引值,其叶子节点保存不仅仅是键值,还保存了位于同一行记录里的其他列的信息,由于密集索引决定了表的物理排列顺序,一个表只能有一个物理排列顺序,所以一个表只能创建一个密集索引。 b)稀疏索引文件只为索引码的某些值建立索引项,其叶子节点仅保存了键位信息以及该行数据的地址或者主键。 咱们来对MySql做具体分析,mysql主流...

weixin_34233421的博客 383

Avalonia跨平台开发入门:从安装到运行第一个应用(Windows/Linux/macOS)

本文详细介绍了Avalonia跨平台开发的基础入门指南,从安装到运行第一个应用的全过程。涵盖Windows、Linux和macOS三大平台的环境配置,特别推荐使用Visual Studio进行开发,并提供常见问题的解决方案,帮助开发者快速上手Avalonia框架。

weixin_28688385的博客 539

MySQL密集索引和稀疏索引的区别

1. 密集索引文件中的每个搜索码值都对应一个索引值, 通俗的说就是叶子节点保存的不仅是键值, 还保存着同一行列中的其他列的信息 2. 稀疏索引文件只为索引码的某些值建立索引项 在InnoDB中: 1.若一个主键被定义, 则该主键作为密集索引; 2.若没有主键被定义, 则该表的第一个唯一非空索引作为密集索引; 3.若不满足以上1&2条件, InnoDB内部会生成一个隐藏主键作为密集索引; 第3条的逻辑是什么? 因为非主键索引的叶子节点并不存储行数据的物理地址, 而是存储该行的主键值, 所以非主键索引包

一个做量化交易的攻城狮 616

【小白教程】本地部署VLM-R1模型(使用Docker)

通过Docker本地部署VLM-R1大模型,详细教程。

m0_69855053的博客 2929

手把手教你用STM32CubeIDE移植Vector CCP驱动,实现与INCA的标定通信(附避坑指南)

本文详细介绍了如何在STM32CubeIDE环境下移植Vector CCP驱动,实现与INCA的标定通信。从开发环境准备、CAN外设配置到CCP协议栈移植和A2L文件生成,提供了完整的操作流程和常见问题解决方案,帮助工程师快速掌握基于CAN总线的标定技术。

weixin_28685287的博客 135

mysql的稀疏索引和密集索引的区别

密集索引和稀疏索引的区分在与是否为每个索引键的值都建立索引,简单来说就是比如有一列的值如下:1、2、3、4、5、6、7 密集索引的做法是为这7个值建立索引记录,那么就有7条索引记录,抽象索引记录如下: 1:到1的指针 2:到2的指针 .... 7:到7的指针 稀疏索引的做法是将这个6个值分组,1、2、3和4、5、6和7分为不同的3组,取这三组中最小的索引键值作为索引记录中的索引值,抽象索引记录如下: 1:到顺序存储1、2、3的起始位置的指针 4:到顺序存在4、5、6的起始位置的指针 7..

qq_32486597的博客 759

kettle写doris操作

文件在目录:doris-master\extension\kettle\assemblies\plugin\target\doris-stream-loader-plugins-9.4.0.0-343.zip。官方提供了doris stream load插件,下载源码编译后放到kettle的插件目录即可使用。地址:https://github.com/apache/doris.git。注意:需要doris插件或者kettle转换生成模板的私聊博主。使用PDmaner同步业务库生成建表语句。

weixin_44449054的博客 3022

MySQL (8) 聚集索引 非聚集索引 聚簇索引 稀疏索引 稠密索引

聚集索引聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引 也就是说聚集索引的顺序就是数据的物理存储顺序。它会根据聚集索引键的顺序来存储表中的数据,即对表的数据按索引键的顺序进行排序,然后重新存储到磁盘上。因为数据在物理存放时只能有一种排列方式,所以一个表只能有一个聚集索引。比如字典中,用‘拼音’查汉字,就是聚集索引。因为正文中字都是按照拼音排序的。而用‘偏旁部首’查汉字,就是非聚集索引

JavaLab 5640

uniapp - 超详细 H5 网页引入百度地图教程,附地图示例 / 获取当前设备定位的省市区、详细地址、经纬度信息 / 用户当前 IP 属地定位地理位置等等(新手小白快速上手,详细配置及使用全流程)

uniapp百度地图,uniapp百度地图ip属地定位,uniapp百度地图获取省市区详细地址经纬度等,uniapp百度地图当前用户设备定位省份市区详细所在地ip属地等详细教程示例,uniapp网页h5引入百度地图详细教程,uniapp h5网站使用百度地图详细教程,uniappH5端如何接入使用百度地图api,uniapp H5网页端百度地图获取地理位置信息,uniapp h5页面引入百度地图,uniapp h5平台百度地图获取城市信息,uniapp百度地图获取经纬度,uniapp 百度地图拿省市区用什么

🏆 前端领域优质创作者 6201

点云去噪:基于点云拟合的方法

点云处理是计算机视觉中的重要任务之一,而点云去噪是点云处理的关键步骤之一。在实际应用中,由于采集设备的噪声、运动估计误差或者环境干扰等因素,点云数据中常常包含有噪声点,这些噪声点会对后续的点云分析和处理造成不良影响。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。该方法通过拟合点云数据的曲面模型,对噪声点进行识别和过滤,从而得到更加干净的点云数据。

AuSwift的博客 634

稀疏索引与稠密索引

在谈这两个索引之前,我们要明白为什么要使用索引,当内存容纳不下记录本身大小,我们存储较小的索引,这样查 找记录最多只需要一次I/O操作。 先说一下聚集索引的定义: 聚集索引:在一张表中,如果一个索引有如下特性,数据的物理顺序与键值得逻辑顺序相同,则该索引叫聚集索引。 稠密索引和稀疏索引都属于聚集索引。 1.    稠密索引 定义:它由键值和指针(指向记录本身地址)组成的一系列存

心有多大舞台就有多大 7155

从零开始学 AUTOSAR:深入浅出 SAE J1939 诊断通信管理器(J1939Dcm)深度完整版

SAE J1939 是美国汽车工程师学会制定的重型车辆 CAN 总线通信标准,覆盖卡车、客车、工程机械、农机、船舶等,是商用车领域的 “通用语言”。基于CAN 2.0B 扩展帧(29 位 ID)(车规主流)PGN(参数组号)+ SPN(可疑参数号)核心标准:J1939-21:数据链路层(CAN 帧格式、地址声明)J1939-71:应用层(普通信号、报文)诊断层(核心!J1939Dcm 依据)J1939-81:网络管理(地址管理、节点检测)

getusushu的博客 107

MySQL倒序索引测试2

测试环境 MySQL Community Server 8.0.17 准备测试数据 DROP TABLE TB001; CREATE TABLE TB001(ID INT PRIMARY KEY AUTO_INCREMENT,C1 INT); INSERT INTO TB001(C1) SELECT 1 FROM information_schema.col...

weixin_30565199的博客 1078

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

mysql单表2千万数据如何添加索引

在MySQL中对包含大量数据的表(如2千万条记录)直接添加索引确实可能会导致操作非常缓慢,甚至导致数据库服务变得不可用。

得塔云的博客 779

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MySQL学习[2] ——MySQL索引

通过将多个字段组合成一个索引,这个索引就叫做联合索引。联合索引的非叶子节点用两个字段的值作为 B+Tree 的 key 值。当在联合索引查询数据时,先按 product_no 字段比较,在 product_no 相同的情况下再按 name 字段比较。这是**最左匹配原则,按照最左优先的方式进行索引的匹配。在使用联合索引进行查询的时候,如果不遵循「最左匹配原则」,联合索引会失效**,这样就无法利用到索引快速查询的特性了。

shenfenxihuan的博客 5172

mysql 索引 二_2、MySQL索引

一、索引介绍索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。二、为啥要使用索引如上图,是MySQL中一张表T的2列数据,现在要找...

weixin_34275305的博客 88

[MySQL]2-MySQL索引

从索引的匹配原则到索引的创建、索性的使用、执行计划的解释、MySQL对语句的一些优化

啾啾头号大粉丝打工买粮博客 832

MySQL索引2——索引的类型以及索引的创建

按照B+Tree存储形式方式分类聚集索引和二级索引(两种索引的存储格式)按照索引的特征进行分类主键索引、唯一索引、常规索引、全文索引、空间索引其中主键索引、唯一索引、常规索引都为B+Tree索引结构全文索引为Full-Text索引结构空间索引为R-Tree索引结构按照单个索引的字段个数分类单列索引和联合索引对于索引的优化又有两种索引前缀索引和覆盖索引在讲解索引的具体类型之前我们先了解一下索引的相关知识什么是回表查询。

m0_49864110的博客 1078

2-2 mysql 索引

索引定义 索引分类 单列索引 2. 唯一索引 3. 主键索引

langkeyring的博客 687

2.索引:MySQL 索引分类

索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建,只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQUE常规索引快速定位特定数据可以有多个全文索引全文索引查找的是文本中的关键词,而不是比较索引中的值可以有多个FULLTEXT分类含义特点聚集索引 (Clustered Index)将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。

m0_72560900的博客 1496

【MYSQL索引】2 索引创建原则

① 冗余索引举例:建表语句如下我们知道,通过 idx_name_birthday_phone_number 索引就可以对 name 列进行快速搜索,再创建一个专门针对 name 列的索引就算是一个 冗余索引 ,维护这个索引只会增加维护的成本,并不会对搜索有什么好处。② 重复索引col2 INT,我们看到,col1 既是主键、又给它定义为一个唯一索引,还给它定义了一个普通索引,可是主键本身就会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况要避免。

ChanceZhou的博客 1051

Mysql索引2

但是 UUID 不是递增的,MySQL 中索引的数据结构是 B+Tree,这种数据结构的特点是索引树上的节点的数据是有序的,而如果使用 UUID 作为主键,那么每次插入数据时,因为无法保证每次产生的 UUID 有序,所以就会出现新的 UUID 需要插入到索引树的中间去,这样可能会频繁地导致页分裂,使性能下降。另外字符串越长,占用的内存越大,由于页的大小是固定的,这样一个页上能存放的关键字数量就会越少,这样最终就会导致索引树的高度越大,在索引搜索的时候,发生的磁盘 IO 次数越多,性能越差。

wjcurry的博客 749

mysql学习之2——mysql索引

一、从索引方法(或索引算法)角度看 mysql中主要有四种类型的索引,分别为:B-Tree 索引,Hash 索引,Full-text 索引和 R-Tree 索引,下面针对这四种索引的基本实现方式及存储结构做一个大概的分析。 二、聚集索引和非聚集索引 聚集索引中键值的逻辑顺序决定了表中相应行的物理顺序。   聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和

莫失莫忘-云姐 1581

MySQL的索引总结2

InnoDB中的索引 聚集索引(主键索引) 每个表只有一个主键索引(B +数结构),叶子节点同时保存了主键的值也保存了数据记录,其它节点只存储主键的值。 非聚集索引(辅助索引) 每个表可以有多个 b+树结构,叶⼦节点保存了索引字段的值以及主键的 值,其他节点只存储索引指端的值。 MyISAM中的索引 MyISAM中使用的是非聚簇索引。 ...

joeyin 185

MySql索引——索引的结构2

索引的分类、优缺点、相关概念

Alex_cf的博客 858

【MySQL】-14 MySQL索引(上篇MySQL索引类型前置-2-高性能的索引策略)

MySQL索引-高性能的索引策略

yinying293的博客 1471
上一篇: 1、MySQL架构
下一篇: 3、SQL分析工具~Explain
爱写bug的小刘
博客等级 码龄8年 795粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值