MySQL基础:索引

news2024/9/21 11:01:47

 💎所属专栏:MySQL   

在这里插入图片描述

1. 索引概述

MySQL中的索引是帮助MySQL高效获取数据的数据结构,可以极大地提高数据库的查询效率,减少数据库的I/O成本,就像书的目录一样,它可以帮助我们快速定位到书中的内容。

优势:

  1. 提高数据检索的效率,降低数据的IO成本
  2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗

劣势:

1. 索引列需要占用一定的空间

2. 索引大大提高了查询效率,同时也降低了更新表的效率,例如对表进行INSERT,UPDATE,DELETE时,效率会降低

在实际开发中,查询操作要远远多于更新操作,还是更推荐使用索引。

2. 索引的分类

3. 索引的使用

3.1. 查看索引

show index from student;

索引是按照列的方式创建的,可以给某个列创建索引

primary key,unique,foreigh key都会自带索引,不需要手动创建,只需要建表的时候指定约束,就会自动生成索引

生成索引之后,假如只有student_id有索引,那么只有select * from student where student_id = 1;这样这对有索引的那一列的查询才会提高效率,其他的话还是遍历整个表

3.2. 创建索引

-- 创建索引
create index name_index on student (name);
-- 查看索引
show index from student;

创建索引其实是一个危险操作:

如果是针对空表或表中的数据量小,创建索引问题不大,但是在日常开发中,正常来说数据规模都是比较大的,一旦创建索引之后,就可能触发大量的硬盘IO,机器就会卡死

所以说,在最初创建表的时候就要提前规划出需要给那些列加上索引,如果说某个表中确实需要加索引,那么就需要重新换一个数据库,把原来的数据导入到新库中

3.3. 删除索引

-- 删除索引
drop index name_index on student;
-- 查看索引
show index from student;

unique自动生成的索引可以被删除,但是primary key 还有 foreigh key自动生成的索引是不可以删除的

既然创建索引就已经是危险操作了,那么删除索引肯定也是一个危险操作,具体原因是一样的,在实际开发中,一般也不会去删除一个索引

4. 索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包括以下几种:

索引结构

描述

B+Tree索引

最常见的索引类型,大部分引擎都支持B+Tree索引

Hash索引

底层是哈希表,只有精确匹配索引列的查询才有效,不支持范围查询

R-tree(空间索引)

空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,使用较少

Full-text(全文索引)

通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,Es

后面两种索引都使用的很少,主要介绍前面两种

在我们学过的数据结构之中,适合作为查询的有哈希表,二叉搜索树,哈希表就不多说了,二叉搜索树可能会变成一个单分支树,或是一条链表,最坏情况下查询的时间复杂度是O(n)的,所以就有了红黑树,边插入边调整,使其保证二叉树的结构,但是当数据量特别大时,尤其是对于数据库这样级别的数据量,红黑树的树高也会非常大,查询的效率还是不够高,所以就又出现了一种为数据库量身打造的数据结构——B+树,B+树是对B树做出了进一步的改进

4.1. B-tree(多路平衡查找树)

B树就是在二叉搜索树的基础上,允许多于两个子节点的多路平衡查找树,有N个key,划分成N+1个区间,通过这样的结构,进行查询的时候,针对每一个节点,都要比较多次,才能确定下一步要走哪个区间,虽然说相比于二叉树,树的高度变低了,但是比较次数变多了,相比于二叉树效率真的提高了吗?

其实,对于每一个节点,访问的时候是一次硬盘IO就可以了,和某个节点比较的的时候,是先一次硬盘IO,把这个节点上的内容都读取出来,接下来的比较都是在内存中进行的了,所以说减少了硬盘IO的次数,因此这种结构效率更高

4.2. B+树

B+树是B树的一种变形形式,

B+树的优势:

  1. N叉搜索树,高度比较低,硬盘IO比较次数就少
  2. 叶子节点是全集,并且用链表结构连接,方便进行范围查询
  3. 在B+树中,所有查询都是要落在叶子节点上完成的,每次查询经历的IO次数和比次数都是差不多的,查询的开销比较稳定
  4. 还是由于叶子节点是全集的性质,非叶子节点不必存储数据行,只需要存储索引列的key即可,这使得非叶子节点占用的空间也比较小

在这里插入图片描述

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

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

相关文章

《深入理解JAVA虚拟机(第2版)》- 第8章 - 学习笔记

第8章 虚拟机字节码执行引擎 8.1 概述 执行引擎是Java虚拟机最为核心的组成部分之一。在不同的虚拟机里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器生成本地代码执行&#xff0…

监控平台之nodejs模拟后端接口

github:可以下载进行实验 https://github.com/Mr-Shi-root/sdk-platform/tree/master 1.配置node环境,安装express cors body-parser babel/cors body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。cookie-parse…

光伏清洁机器人4G之痛,LoRa通讯取而代之?

光伏清洁机器人是一种专门用于清洁光伏组件(太阳能电池板)的自动化机器人。通过自主或者远程控制自动清洁光伏板上的尘土、鸟粪、树叶等污染物,在提升清洁效果的同时提高光伏电站的发电效率。然而,面对偏远无人区的孤岛效应及复杂…

交友系统“陌陌”全方位解析

交友系统在现代社会中扮演着越来越重要的角色,尤其是随着互联网技术的发展,各种交友软件层出不穷。陌陌作为其中的佼佼者,其全方位解析对于理解交友系统的商业开发至关重要。 陌陌的核心功能是提供基于地理位置的社交服务,用户可…

MES生产制造执行系统源码,使用代码生成器可以一键生成前后端代码 + 单元测试 + Swagger 接口文档 + Validator 参数校验。

企业需要MES生产制造执行系统来提供实现从订单下达到完成品的生产活动优化所得信息,并运用及时准确的数据,指导、启动、响应并记录车间生产活动,对生产条件的变化做出迅速的响应,减少非增值活动,提高效率,为…

# 利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优--1

利刃出鞘_Tomcat 核心原理解析(十)-- Tomcat 性能调优–1 一、Tomcat专题 - Tomcat性能调优 - 性能测试 1、tomcat 性能测试: 对于系统性能,用户最直观的感受就是系统的加载和操作时间,即用户执行某项操作的耗时。从…

SketchUp Pro 2024 for Mac/Win:专业3D建模软件的卓越之选

SketchUp Pro 2024作为一款在业界广受好评的三维建模软件,不仅适用于Mac系统,也完美兼容Windows平台,为用户提供了跨平台的强大建模能力。该软件以其直观易用的界面设计著称,无论是初学者还是资深设计师,都能迅速上手并…

介绍冯诺依曼体系结构和操作系统

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1. 冯诺依曼体系结构2. 操作系统(O…

【数据结构取经之路】位图全解

目录 前言 C标准库里的位图 位图的设计及实现 位图几个关键接口的实现 set() reset() test() 完整代码 位图的使用场景 位图的优缺点 位图的使用演示 —— 几道面试题的讲解 前言 位图(Bitmap)是一种非常高效的数据结构,主要用于处…

Claude Enterprise:Anthropic 推出企业级AI助手挑战OpenAI

Anthropic公司推出了Claude Enterprise,这是一项新的企业级AI服务,旨在提供更安全、更可控的AI聊天机器人体验。通过这个服务,企业可以将内部知识库与Claude机器人连接,使其能够访问和分析公司数据,从而回答员工的查询…

【MySQL】MySQL Workbench下载安装、环境变量配置、基本MySQL语句、新建Connection

1.MySQL Workbench 下载安装: 进入网址:MySQL :: MySQL Workbench Manual :: 2 Installation (1)点击“MySQL Workbench on Windows”(下载Windows版本)(2)点击“Installing” &…

前端Vue框架,本地数据库nedb

封装 db.js(文章nedb版本^1.8.0) // db.js// 导入 NeDB 模块 const Datastore require(nedb)// 创建数据库实例,最大600M或100W行 const db new Datastore({ filename: ./database.db, autoload: true, inMemoryOnly: false, maxFileSize: 600 * 1024…

如何将 Redshift Cryptomatte AOV 与 teamrender 结合使用,成都渲染101云渲染

这篇文章将讨论在 Cinema 4D 中将 cryptomatte AOV 与 teamrender 结合使用时常见的问题和解决方案。在 Cinema 4D 中使用 AOV 时,用户希望它们的工作方式与其他 AOV 完全相同。但事实并非如此,尤其是与 teamrender 结合使用时。 在 Cinema 4D 中&#x…

【JAVA高级】并发同步工具CyclicBarrier 的使用介绍

📝个人主页🌹:个人主页 ⏩收录专栏⏪:JAVA进阶 🌹🌹期待您的关注 🌹🌹,让我们共同进步! 文章目录 CyclicBarrier 简介CyclicBarrier 的场景示意图&#xff1…

AI绘画时代的自媒体引流攻略:如何实现粉丝暴涨与盈利

一、AI绘画在自媒体引流和赚钱中的应用 创作独特视觉内容,吸引粉丝关注 AI绘画技术可以帮助自媒体从业者创作出独一无二的视觉内容,这些内容在社交媒体上具有很高的辨识度和吸引力。通过以下方式,AI绘画助力引流和赚钱: &#xf…

软件厂商与集成平台协同--打造无缝企业解决方案

引言 在现在的众多项目当中,很多企业面临着日益复杂的业务需求和不断变化的市场环境。为了保持竞争力,企业会选择采用高效的工具和系统来管理和运营。CRM(客户关系管理)软件和ERP(企业资源规划)系统是企业…

PMF源解析软件下载、安装、运行;Fpeak模式运行结果优化及误差评估;大气颗粒物理化性质等基础知识和通过PMF方法对其来源解析

目录 专题一 PMF源解析技术简要及其输入文件准备 专题二 PMF源解析技术的原理,PMF软件的实操及应用举例 专题三 PMF源解析结果的优化及误差评估 更多应用 颗粒物污染不仅对气候和环境有重要影响,而且对人体健康有严重损害,尤其在一些重污…

计算机毕设选题推荐-基于python的校园班级课程表管理系统

💖🔥作者主页:毕设木哥 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 实战项目 文章目录 实战项目 一、基于python的校园班级课程表…

【C++】简述STL——string类的使用

文章目录 一、STL的简述1.STL的框架2.STL版本 二、string1、string的介绍2、为什么string类要实现为模板? 三、string的构造接口四、string的容量相关的接口五、string对象修改相关的接口1、insert2.earse3、assign4、replace 六、string对象字符串运算相关接口1、c…

【Linux】《Linux 常见指令全攻略》

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…