索引—MySQL

news2024/9/25 9:31:37

文章目录

  • 1.定义以及相关知识
    • 1.1定义
    • 1.2数据库保存数据的基本单位
  • 2.MySQL中索引分类
    • 2.1B树和B+树
    • 2.2主键索引(聚簇索引)
    • 2.3非聚簇索引
    • 2.4覆盖索引
    • 2.5复合索引(联合索引)
    • 2.6基于B+树的索引
    • 2.7hash索引

1.定义以及相关知识

1.1定义

使用一定的数据结构来保存索引字段对应的数据,以后根据索引字段来进行检索提高检索效率

注意:使用一定的数据结构需要一定的空间来保存,索引字段可以是一列或多列;是否能够命中索引是SQL性能优化的关键

(1)建立索引:类似建立书籍目录或手机的电话簿
(2)使用索引:查询条件中的字段能够命中索引
(3)创建索引、更新/删除索引字段、插入数据都会导致索引更新的耗时操作

1.2数据库保存数据的基本单位

(1)数据库保存数据的基本单位是page
在这里插入图片描述

(2)目的:硬盘读取文件到内存的io操作也是耗时的,读取数据最好也就保证能最少次读取到需要的结果集

2.MySQL中索引分类

创建某个索引可以是以下多种类型
(1)从索引存储结构划分:B+树索引,hash索引
(2)从应用层次划分:普通索引、唯一索引、主键索引、复合索引
(3)从索引键值类型划分:主键索引、辅助索引(二级索引)
(4)从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)
(5)从索引列数量划分:单列索引、复合索引

2.1B树和B+树

(1)B树:所有节点都保存有索引列及数据
(2)B+树:每个节点都是page,叶子结点保存有索引列及数据,非叶子结点只有索引字段,B+树叶子结点全部相连
(3)区别:
①数据的保存位置不同:B+树保存在叶子节点,B树保存在所有的节点中(体现出B+树优势:节点不存储data,这样一个节点就可以存储更多的key,可以使得树更矮,所以IO操作次数更少;查询性能稳定:每次查询都是从根节点遍历到叶子节点,查询路径长度相同,即每次查询效率相当,时间复杂度固定是O(log(n))
②叶子节点的指向不同:B+树相邻的叶子节点通过指针相连,B树没有(体现出B+树优势:所有叶子节点形成有序链表,便于范围查找)

2.2主键索引(聚簇索引)

(1)默认是B+树,聚簇索引,一张表只能有一个主键索引
(2)在B+树的叶子结点上存放有主键字段(索引字段)+整行数据
(3)优点:速度快
(4)缺点:主键需要是整形且字段不要太长,更新代价大,效率低

2.3非聚簇索引

(1)非主键索引,可以使用很多类型的索引,如B+树、hash等等
(2)如果使用的是B+树存储结构,叶子结点上存放索引字段的值+主键的值
(3)搜索数据的方式:先通过索引字段找到叶子结点上的主键值,再通过主键值找到整条数据(属于回表操作)
(4)优点:更新代价相对比聚簇索引小(叶子结点是索引值和主键值,没有真实数据)
(5)缺点:依赖有序数据,可能产生回表操作导致效率更低

2.4覆盖索引

(1)覆盖索引是一个索引包含所需要查询的字段的值
(2)使用:select 覆盖索引字段 from 表 where 覆盖索引字段 = “”;
(3)注意:is null / is not null是不会走索引的
(4)优点:不需要回表操作

2.5复合索引(联合索引)

(1)使用多列来创建索引
(2)符合最左匹配原则:联合索引的多个字段遵循从左往右的优先级,最左优先,当出现范围查询是停止匹配
(3)查询的条件字段顺序是无所谓的,关键是索引创建的字段顺序(查询是必须包含创建索引的第一个字段否则不匹配)

2.6基于B+树的索引

(1)主键索引(聚簇索引)
(2)非聚簇索引(可以建立成B+树的索引)
(3)优化原则:索引字段尽量不要有null的值
修正(查询的时候,条件是字段is [not] null, !=会走全表扫描,不会走引);频繁查询的字段建立索引:需要考虑最左匹配原则,顺序是左边;频繁更新的字段,慎用索引(索引更新代价大)=>适用读多写操的场景;范围查询(between, <, <, like等)可能走索引,也可能不走(MySQL中,存在一个查询优化器,用于判断如何执行:多个索引存在时,先找到最优的一个索引,判断是不是走这个索引更快,如果是,走索引;如果不是,全表扫描)

2.7hash索引

(1)HashMap
(2)存储数据的特性:键值对,无序且键唯一
(3)底层数据结构:数组+链表+红黑树
(4)原理:存取元素,复杂的是存(put)流程

①算数组位置,往上边放(根据key的hashcode值,基于内部hash函数计算出数组索引);②如果该位置没有元素,往这个地方放;③如果有元素,往链表上放,看是否存在节点equals(key),如果存在就替换;如果不存在尾插;④如果放进去了东西,可能需要扩容

(5)hash索引的特点:不支持顺序和范围查询

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

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

相关文章

okio篇--总览

看源码第一步&#xff0c;先去看看官网对okio的介绍&#xff1a; Okio 首先第一段&#xff1a; okio对bytes&#xff0c;做了两种形式的封装&#xff1a;ByteString和Buffer。 其中ByteString&#xff0c;是针对字符类的数据&#xff0c;内部封装一个byte数组&#xff0c;封…

网络协议与攻击模拟-06-ICMP重定向

■0网络不可达 ■2协议不可达 类型4源抑制 类型5重定向 2、 ICMP 常见的报文 响应请求 使用 ping 请求&#xff08; type 0)响应&#xff08; type 8) 目标不可达 type 3 源抑制 源抑制则充当一个控制流量的角色&#xff0c;它通知主机减少数据报流量&#xff0c;由于 I…

Django初识

1、简介 Django&#xff0c;是用python语言写的开源web开发框架&#xff0c;并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站&#xff0c;而开发出来了这个框架&#xff0c;于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt&#…

操作系统第二章——进程与线程(中)

和光同尘&#xff0c;与时舒卷 文章目录 2.2.1 调度的概念&#xff0c;层次知识总览调度的基本概念高级调度低级调度中级调度三层调度的联系&#xff0c;对比进程的挂起态和七状态模型知识回顾 2.2.2 进程调度的时机&#xff0c;切换与过程&#xff0c;方式知识总览进程调度的时…

【C++】第二站:类和对象(中)拷贝构造函数

文章目录 一、拷贝构造函数的概念二、拷贝构造函数的特性三、深度剖析拷贝构造函数不采用引用会无限递归的原因1.C对于传参的两个规定2.如何解开这个无穷递归 四、拷贝构造函数的其他特性五、拷贝构造的一些使用场景 一、拷贝构造函数的概念 拷贝构造函数&#xff1a;只有单个形…

2.2 Linux控制台访问CLI

系列文章目录 第1章 Linux Shell简介 第2章 Shell基础 <本章所在位置> 第3章 Bash Shell基础命令 第4章 Bash Shell命令进阶 第5章 Linux Shell深度理解 第6章 Linux环境变量 第7章 Linux文件权限 第8章 Linux文件系统的管理 第9章 Linux软件安装 第10章 Linux文本编辑器…

【MySQL】搭建出高可用性、高性能的MySQL集群要考虑的事是蛮多的,你看看会不会?

MySQL 架构设计数据同步负载均衡安全性监控和维护注意的点1. 确定节点数量和配置2. 选择合适的硬件和网络设备3. 避免单点故障4. 定期备份和恢复测试5. 定期更新和升级 Java工程师使用集群步骤最后 MySQL集群是一种高可用性、高性能的数据库解决方案&#xff0c;它可以通过多个…

基于Django实现的TMS物流管理系统(附源码下载)

基于Django实现的物流管理系统&#xff08;TMS&#xff0c;Transportation Management System&#xff09; 特点 前端基于Bootstrap 4框架和AdminLTE框架。使用MySQL作为数据库后端。实现了运单录入、发车出库、到货签收、客户签收等基本功能。拥有较为完善的报表功能和财务管…

Java—JDK8新特性—Lambda表达式【内含思维导图】

目录 JDK8新特性 2.Lambda表达式 思维导图 2.1 什么是Lambda表达式 2.2 为什么使用Lamdba表达式 2.3 Lambda表达式基本语法 2.4 类型推断 2.5 Lambda练习 2.6 Lambda常用场景 JDK8新特性 官网提供网址&#xff1a;JDK 8 Features 2.Lambda表达式 思维导图 2.1 什么是…

浅谈Dom和Bom(清晰易懂版)

DOM&#xff08;文档对象模型&#xff09; DOM 是浏览器提供的一种操作网页内容和结构的 API&#xff0c;它将 Web 页面表示为一个树形结构&#xff0c;其中每一个 HTML 元素都是一个节点&#xff0c;可以通过 DOM API 对其进行访问和操作。DOM API 包括了一系列方法和属性&am…

Shapes布局-文字环绕动画

文章目录 说明实现以及语法动画渐变裁切图形变换的动画效果 说明 Shapes也有形状、图形的意思&#xff0c;我们可以在页面中创建图形&#xff0c;并让内容环绕在定义的图形边上。 Shapes的官方文档&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Shapes/F…

YOLOv8 来了,快速上手实操

目录 YOLOv8的优点安装ultralytics使用YOLOv8n在图像上进行PredictTasks与 ModesModes - 模式分类Tasks - 任务分类 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;程序员半夏 , 一名全栈程序员&#xff0c;擅长使用各种编程语言和框架&#xff0c;如JavaScript、React、N…

SpringBoot集成Redis—缓存穿透解决方案与哨兵模式实战

目录 1、环境准备 1&#xff09;pom.xml引入Redis依赖 2) 演示业务场景 2、SpringBoot集成Redis单机模式 1&#xff09; 通过MyBatis逆向工程生成实体Bean和数据持久层 2) application.yml 中配置redis连接信息 3) 启动redis服务 4) XinTuProductRedisController类 5…

一图看懂 yarl 模块:为URL解析和更改提供了方便的URL类, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 yarl 模块&#xff1a;为URL解析和更改提供了方便的URL类, 资料整理笔记&#xff08;大全&#xff09; 摘要模块图类关系图模块全展开【yarl】统计常量模块1 yarl._quoting…

Python图形界面开发——系统资源监视器System-Monitor

Python图形界面程序怎么开发呢&#xff1f;很多人推荐python自带的tkinter自带库&#xff0c;还有pyqt这个这种拖拽式界面开发方案&#xff0c;但是他们开发界面比较难定制界面样式。现在web前端这么多框架用来开发python的图形界面其实不是很好&#xff1f;下面这么案例就是用…

Python爬虫 | 一文解决文章付费限制问题

本文概要 本篇文章主要介绍利用Python爬虫爬取付费文章&#xff0c;适合练习爬虫基础同学&#xff0c;文中描述和代码示例很详细&#xff0c;干货满满&#xff0c;感兴趣的小伙伴快来一起学习吧&#xff01; &#x1f31f;&#x1f31f;&#x1f31f;个人简介&#x1f31f;&…

项目内训(2023.5.6)

目录 Nacos是什么&#xff1f; 领域模型是什么&#xff1f; domain模块一般是干什么的&#xff1f; 在小乌龟中合并其他分支的作用是什么&#xff1f; nacos的配置文件 服务集群、服务提供、服务更加灵活庞大、消费服务、访问比较麻烦&#xff0c;A和B服务一起访问 系统结…

Qt5.9学习笔记-事件(四)Qt5.9中常见事件

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

5月1日 9H45min|5月2日 8H20min+30min|时间轴复盘

8:00 起床 8:00-8:30 洗漱吃饭 8:30-10:40 temporary pools阅读真题精读 (真的很慢了 不知道什么原因 感觉也没有彻底完全弄懂)【2h+10min】 10:40-11:10 午餐+酸奶(423+174KJ) 11:20-12:30 三篇阅读【1h+10min】 13:10-14:50 健身 14:50-15:45诵默写list…

【Stable Diffusion】ControlNet基本教程(四)

本文概要 接上篇【Stable Diffusion】ControlNet基本教程&#xff08;三&#xff09;&#xff0c;本篇再介绍两个ControlNet常见的基本用法&#xff1a;控制人物动作和建筑/室内生成。让人物摆出特定的动作&#xff0c;这是ControlNet最神级的操作&#xff01;这意味着可以自定…