索引【MySQL】

news2024/11/20 4:42:07

1.1 概念 

        索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。

1.2 作用

        数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍目录,可用于快速定位、检索数据。 索引对于提高数据库的性能有很大的帮助。

1.3 使用场景

要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

  1. 数据量较大,且经常对这些列进行条件查询。
  2. 该数据库表的插入操作,及对这些列的修改操作频率较低。
  3. 索引会占用额外的磁盘空间。

        满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。 反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。

        举一个形象的例子,索引本质上相当于“书的目录”,通过目录就可以快速的找到章节对应的位置,索引的效果就是加快了查找的速度。

        数据库操作查的概率比增删改的概率要大得多,因此大多数情况下,引入索引还是比较好的选择,但是注意,索引也会增加增删改的时间开销(增删改需要调整已经创建好的索引目录),还会增加空间的开销(构造索引,也需要额外的硬盘空间来保存)。

1.4 使用

        mysql数据库创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

  1. 查看索引——show index from 表名;                                              
  2. 创建索引:对于非主键、非唯一约束、非外键的字段,可以创建普通索引——create index 索引名 on 表名(字段名);            
  3. 删除索引——drop index 索引名 on 表名;

创建索引最好是在表创建之初就把索引给搞好,否则在数据很多的情况下是很危险的操作。 

  1. 吃掉大量的磁盘IO,这段时间内数据库是无法被正常运行的(删除索引也是如此) 
  2. 针对性别这样的列添加索引是无法提高查找数据的
  3. 要是已经有大量数据了,再进行操作就要慎重了

 

         索引创建好之后不需要手动使用,直接查询的时候数据库会自动的来走索引,SQL是通过数据库的执行引擎来执行的,执行引擎内部会有优化操作(自动评估,选择成本最低,速度最快的方法),查询是否在走索引或者怎么走的是不好预测的,可以使用explain这个关键词来显示查询过程中具体的使用索引的情况。

 索引在mysql中的数据结构

是哈希表吗?  不是

        哈希表只能比较相等,无法进行范围查询(显然mysql经常要范围查询)

是二叉搜索树吗?   不是

        二叉可以范围查询,但元素个数多了树的高度会很高,元素的比较次数就会比较多

是N叉搜索树(B树)吗? 不是

        虽然比较次数较二叉没怎么减少,但是读写硬盘的次数减少了

是B+树吗?   是滴~

        为数据库量身定做的数据结构

  1.  B+树也是一个N叉搜索树,每个节点上可能包含N个key,N个key划分出N个区间,最后一个key相当于是最大值。
  2. 父元素的key会在子元素中重复出现,并且是子元素中的最大值(这样重复出现导致叶子节点包含了所有数据的全集,非叶子节点中的所有值都会在叶子节点中体现出来)
  3. 叶子节点用类似链表的方式首尾相连

B+树的优点:

  1. 作为一个N叉树,高度降低了,比较的时候硬盘IO次数减少了
  2. 更适合进行范围搜索
  3. 所有的查询都是要落在叶子节点上的,所以无论查询哪个元素,中间比较的次数差不多,查询操作比较均衡
  4. 由于所有的key都会在叶子节点中体现,因此非叶子节点不必存表的真实数据(数据行),只需要把所有的数据行给放到叶子节点上即可(非叶子节点只需要存索引列的值)

 非叶子节点中只存了简单的id,所以空间成本大大降低,可以在内存中缓存,提高查询速度,减少硬盘IO次数。

B+树这个结构只是针对mysql的InnoDB这个数据库引擎里面所典型使用的数据结构。(不同的数据库所使用的数据结构也是不同的)

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

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

相关文章

简洁直观解释精确率、召回率、F1 值、ROC、AUC

混淆矩阵 当我们在做二分类预测时,把预测情况与实际情况的所有结果两两混合,结果就会出现以下4种情况,就组成了混淆矩阵。 P(Positive):代表正样本N(Negative):代表负样…

在vscode中开发sass教程:sass语法

sass官网:Sass世界上最成熟、稳定和强大的CSS扩展语言 | Sass中文网sass:世界上最成熟、最稳定、最强大的专业级css扩展语言!sass是一个css的预编译工具,也就是能够更优雅的书写css;1、sass使用说明: 基于…

【毕业设计】后端实现——账单通过关键词简单分析收支

🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。 前言: 🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~ ✨个…

C++ STL中的set详解

前言 在学习csp题解的时候接触到这个数据结构&#xff0c;故在此记录一下其概念及应用。 基本概念 set的底层采用的是红黑树&#xff0c;所有元素都会根据元素的键值自动排序&#xff0c;方便管理元素&#xff0c;但不支持直接修改键值。 应用 头文件调用 #include <i…

python中is和==的区别,地址和重新复制后,地址变化

简单总结 现象描述&#xff1a;一、“编辑器“中和把赋值语句放在”同一行的cmd环境“中&#xff0c;相同值的不同变量会指向同一个地址 二、交互式/cmd环境中&#xff0c;若赋值相同值的变量在不同行输入&#xff0c;那么变量也会指向不同地址 三、程序编辑器的程序运行就相当…

B2B撮合管理系统优势有哪些?如何助力传统仪器仪表制造业企业数字化转型

仪器仪表制造业是我国制造业的重要组成部分&#xff0c;经过多年的快速发展&#xff0c;我国仪器仪表制造业生产和开发能力产业体系日趋庞大&#xff0c;产销增幅也是高歌猛进&#xff0c;对推动国民经济发展具有重要意义。 然而&#xff0c;随着我国仪器仪表制造业的发展&…

GAN模型1

本次是用GAN模型弄出时光机效果~ 穿越时空的人脸 得到你100年前的样子~~ 时光穿梭第一步&#xff1a;解决数据集难题 鉴于最近StyleGAN在高质量人脸合成和编辑方面的成功&#xff0c;许多工作都集中在使用预先训练好的StyleGAN模型进行人像编辑。 然而&#xff0c;现有的技术…

[附源码]计算机毕业设计JAVA儿童资源教育网站

[附源码]计算机毕业设计JAVA儿童资源教育网站 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

聚观365|抖音上线“防打扰保护工具”;亚马逊拟计划裁员1万人

今日要闻&#xff1a;抖音上线“防打扰保护工具”&#xff1b;亚马逊拟计划裁员1万人&#xff1b;苹果为iPhone14提供同机维修&#xff1b;美国硅谷裁员潮蔓延&#xff1b;乔布斯拖鞋拍卖融入NTF元素 抖音上线“防打扰保护工具” 11月15日&#xff0c;抖音上线“防打扰保护工具…

【数据结构与算法】第一章 绪论 2-数据结构的基本概念

第一章 绪论 2-数据结构的基本概念 思考&#xff1f; 程序 算法数据结构&#xff0c;算法 逻辑控制数据结构有两大用途&#xff1a; 一是用于存放要处理的数据&#xff0c;如迷宫地图二是用于实现算法策略&#xff0c;如迷宫例子中探索方向增量数组&#xff0c;回溯的栈&am…

如何深度自定义mybatis

回顾mybatis的操作的核心步骤 编写核心类SqlSessionFacotryBuild进行解析配置文件 深度分析解析SqlSessionFacotryBuild干的核心工作 编写核心类SqlSessionFacotry 深度分析解析SqlSessionFacotry干的核心工作 编写核心类SqlSession 深度分析解析SqlSession干的核心工作 …

物联网电池产品硬件电路设计思维

最近在整改之前工程师设计的电路板&#xff0c;是采用18650电池供电的一个物联网小板。 像这种电池供电的产品&#xff0c;很重要的一点就是要保证其低功耗&#xff0c;才得以提高续航&#xff0c;因此&#xff0c;对于这类电路板的对外接口的设计&#xff0c;对供电的控制尤其…

Arch Linux 的安装

Arch Linux 的安装 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;Arch Linux 的安装 CSDN&#xff1a;Arch Linux 的安装 版本 Arch Linux&#xff1a;2022.07.01 VMware workstation&#xff1a; 16.2 安装步骤 下载 Arch Linux 并记录其 kernel 版…

【考研英语语法】口语语法

区别一&#xff1a;句子结构 口语中结构更为简单&#xff0c;较少使用从句 只有少量高频连词&#xff08;and / but / or / so / because / if / when&#xff09;正式&#xff1a; While the region was remarkable for its natural beauty, the family experienced seriousl…

法国博士后招聘|国家健康与医学研究院(INSERM)-计算化学

【国外博士后招聘-知识人网】法国国家健康与医学研究院&#xff08;INSERM&#xff09;计算化学博士后 法国国家健康与医学研究院&#xff08;法文为&#xff1a;Institut national de la sant et de la recherche mdicale&#xff09;&#xff0c;简称“Inserm”&#xff0c;成…

软件测试有哪些原则?

软件产品从开发到发布的过程中有一道至关重要的程序—软件测试&#xff0c;也就是验证软件系统的正确性、完整性、安全性和质量的过程。在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。…

股票如何量化选股?

量化选股是通过数量分析的方法去评价某一上市公司的发展前景&#xff0c;以及它的股票是否值得买入&#xff0c;一般采用多因子选股策略&#xff1a;假设有多种因子共同对股票资产收益产生了作用&#xff0c;且这些作用满足线性关系&#xff0c;那么我们就可以通过计算因子的值…

【pymysql的基本使用】

0. 介绍 本文主要介绍如何使用pymysql库来操作mysql数据库&#xff0c;包含docker安装MySQL和对Mysql的各种操作。 参考链接&#xff1a; Welcome to PyMySQL’s documentation! — PyMySQL 0.7.2 documentation Python3 MySQL 数据库连接 – PyMySQL 驱动 | 菜鸟教程 Pyt…

聚焦“生态化”,e签宝讲好电子签名的“中国故事”

文丨智能相对论 作者丨沈浪 电子签名&#xff0c;终于在政企数字化转型的浪潮里得到了认可&#xff0c;正在快速破圈&#xff0c;从过去名不见经传的小赛道成长为了今天的数字化基建工程。 在今年的“科技向实&#xff0c;万物生长“钉钉2022发布会上&#xff0c;e签宝再度亮…

ADC噪声系数 —— 一个经常被误解的参数

噪声系数(NF)是RF系统设计师常用的一个参数&#xff0c;它用于表征RF放大器、混频器等器件的噪声&#xff0c;并且被广泛用作无线电接收机设计的一个工具。许多优秀的通信和接收机设计教材都对噪声系数进行了详细的说明(例如参考文献1)&#xff0c;本文重点讨论该参数在数据转换…