mysql(二) 索引-基础知识

news2024/12/22 18:00:53

继续整理复习、我以我的理解和认知来整理 "索引" 会通过 来展示。

文: 基本概念知识(mysql 的索引分类、实现原理)

图: 画B+树等

MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数据结构。索引最形象的比喻就是图书的目录。注意只有在大量数据中查询时索引才显得有意义。
在MySQL中索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。常见的索引分类如下:
按数据结构分类:B+tree索引、Hash索引、Full-text索引。
按物理存储分类:聚集索引非聚集索引(也叫二级索引、辅助索引)。
按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。
按字段个数分类:单列索引联合索引(也叫复合索引、组合索引)。

目录

引擎InnoDB与MyISAM的区别

事务支持:

行级锁定:

外键约束:

全文搜索:

崩溃恢复:

表的大小限制:

索引的"样子"

模拟B+Tree的数据 图

InnoDB(结合数据)图

MyISAM(结合数据)图

索引的基础知识

小结:

1、为什么不建议使用过长的字段作为主键

2、为什么建议使用增长的数字类型作为主键

3、索引失效


引擎InnoDB与MyISAM的区别

存储文件类型:

        InnoDB:InnoDB 存储引擎使用表空间文件进行数据存储。每个表都有一个单独的 .ibd 文件用于存储数据和索引。

查看地址(适配自己的版本和路径):C:\ProgramData\MySQL\MySQL Server 5.6\data\  

MyISAM:MyISAM 存储引擎使用三种文件来存储数据:.frm 文件存储表的定义,.MYD 文件存储数据,.MYI 文件存储索引

  1. 事务支持:

    • InnoDB:支持事务,是一个事务安全的存储引擎。它遵循 ACID(原子性、一致性、隔离性和持久性)属性,可以保证数据的完整性和一致性。
    • MyISAM:不支持事务,不提供数据的回滚和恢复功能。如果发生故障,可能导致数据不一致。
  2. 行级锁定:

    • InnoDB:支持行级锁定,可以在并发访问时更好地处理读写冲突,提供更高的并发性能。
    • MyISAM:只支持表级锁定,这意味着在进行写操作时,整个表都会被锁定,可能导致并发性能较差。
  3. 外键约束:

    • InnoDB:支持外键约束,可以在表之间建立关联关系,保持数据的完整性。
    • MyISAM:不支持外键约束,无法建立关联关系。
  4. 全文搜索:

    • InnoDB:不支持全文搜索。
    • MyISAM:支持全文搜索,可以在文本字段上进行高效的全文搜索操作。
  5. 崩溃恢复:

    • InnoDB:支持崩溃恢复,具有更好的数据安全性和可靠性。
    • MyISAM:不支持崩溃恢复,如果在写入数据时发生崩溃,可能导致数据丢失或损坏。
  6. 表的大小限制:

    • InnoDB:没有表的大小限制,支持大型表。
    • MyISAM:对表的大小有限制,通常最大为 4GB。

索引的"样子"

模拟B+Tree的数据 图

        推荐数据结构模拟的网站:B+ Tree Visualization 可以自己试试、可以模拟、插入、删除、查询等。(注意Max. Degree = 3

  

InnoDB(结合数据)图

         InnoDB的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据.

         先建一张 user表 (只有简单的三个字段)

CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '姓名',
  `age` int(4) NOT NULL DEFAULT '0' COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

        再批量插入数据

insert user(name,age) VALUES("张三",10),("张四",11),("王五",12),("王六",10),("杨六",11);

  数据已经有了、那么在B+Tree中数据是则么存放的呢。(这是主键索引)

索引及数据都是存在叶子节点中的,默认的节点大小是16kb

innodb 默认的一页大小为 16384B = 16384/1024 = 16kb

 注意我们演示和画的图片是以 Max. Degree = 3 来画的。实际数据库应用则是16kb。图片也可以让我们看到页与页之间的联系、这个我们以后聊先 看看数据如何具体存放。

MyISAM(结合数据)图

MyISAM的索引方案虽然也使用树形结构,但是却将索引和数据分开存储。同样也是一棵B+Tree,data域保存数据记录的地址。

将表中的记录按照记录的插入顺序单独存储在一个文件中,称之为数据文件。 即.MYD文件

使用MyISAM存储引擎的表会把索引信息另外存储到一个称为索引文件的另一个文件。.MYI文件

索引的基础知识

下面是一些关于MySQL索引的基础知识:

  1. 索引的作用:索引可以提高数据库查询的速度,特别是在大型数据表中。它可以加快WHERE条件的过滤、排序操作和连接操作的速度。

  2. 索引的类型:MySQL支持多种类型的索引,包括B树索引、哈希索引、全文索引等。其中,最常用的是B树索引,它适用于范围查询和精确查询。

  3. 主键索引:主键索引是一种唯一索引,用于标识表中的每一行。它可以加速通过主键进行数据访问的操作。

  4. 唯一索引:唯一索引要求索引列的值唯一,用于确保数据的完整性。它类似于主键索引,但允许空值。

  5. 普通索引:普通索引是最常见的索引类型,没有唯一性限制。它可以加速查询和排序操作。

  6. 复合索引:复合索引是由多个列组成的索引,可以加速涉及到这些列的查询。在使用复合索引时,查询条件中的列顺序很重要。

  7. 前缀索引:前缀索引是指对索引列的一部分进行索引,而不是整个列。它可以减小索引的大小,提高查询性能,但可能会降低索引的选择性。

  8. 索引的创建和管理:可以使用CREATE INDEX语句在表上创建索引。可以使用ALTER TABLE语句添加、删除或修改索引。定期对索引进行优化和重建可以提高索引性能。

  9. 索引的优缺点:索引可以提高查询性能,但同时也会占用磁盘空间和增加写操作的开销。因此,在创建索引时需要权衡查询性能和数据修改的成本。

  10. 注意事项:在使用索引时需要注意选择合适的列作为索引列,避免创建过多或不必要的索引。索引的选择性和列的数据类型也会影响索引的效果。

小结:

了解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助。

比如:

1、为什么不建议使用过长的字段作为主键

        知道了InnoDB的索引实现后,就很容易明白为什么不建议使用过长的字段作为主键,因为所有二级索引都引用主键索引,过长的主键索引会令二级索引变得过大。


2、为什么建议使用增长的数字类型作为主键

用非单调的字段作为主键在InnoDB中不是个好主意,因为InnoDB数据文件本身是一棵B+Tree,非单调的主键会造成在插入新记录时,数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段作为主键则是一个很好的选择

3、索引失效

现在回顾上一章所写的

mysql(一) 使用注意事项及优化_mysql使用注意事项_DJyzh的博客-CSDN博客

文章里面说会导致索引失效、今天看完索引的结构是否有帮助。 这里面具体的案例我们后面遇到了再具体的去解释。

还有 普通索引、复合索引的图我们在下一篇再写、知道的越多、你不知道的越多、让我们一起学习。

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

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

相关文章

记录--虚拟 DOM 和实际 DOM 有何不同?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 本文我们会先聊聊 DOM 的一些缺陷,然后在此基础上介绍虚拟 DOM 是如何解决这些缺陷的,最后再站在双缓存和 MVC 的视角来聊聊虚拟 DOM。理解了这些会让你对目前的前端框架有…

第四章 HL7 架构和可用工具 - 查看数据结构

文章目录 第四章 HL7 架构和可用工具 - 查看数据结构查看数据结构查看代码表使用自定义架构编辑器 第四章 HL7 架构和可用工具 - 查看数据结构 查看数据结构 当单击“数据结构”列中的名称时,InterSystems 会显示该数据结构中的所有字段。这是 HL7 数据结构页面。…

影视行业案例 | 燕千云助力大地影院集团搭建智能一体化IT服务管理平台

影视行业过去三年受新冠肺炎疫情影响,经历了一定程度的冲击和调整,但也展现出了强大的韧性和潜力。2023年中国影视产业规模可能达到2600亿元左右,同比增长11%左右。影视行业的发展趋势主要表现在内容创新、模式创新和产业融合三个方面&#x…

第八章:将自下而上、自上而下和平滑性线索结合起来进行弱监督图像分割

0.摘要 本文解决了弱监督语义图像分割的问题。我们的目标是在仅给出与训练图像关联的图像级别对象标签的情况下,为新图像中的每个像素标记类别。我们的问题陈述与常见的语义分割有所不同,常规的语义分割假设在训练中可用像素级注释。我们提出了一种新颖的…

PSP - MMseqs2 编译最新版本源码 (14-7e284) 支持 MPI 功能 MSA 快速搜索

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131966061 MPI (Message Passing Interface) 是用于并行计算的标准化和可移植的消息传递接口,可以在分布式内存的多台计算机上运行并行…

操作系统、人工智能、芯片和其它

最近出差一段时间,听到一些事,看到一些事,说点个人观感。有些话可能不好听,还希望不要被平台和谐。   从一位现在微软工作的前同事处得来的消息,微软下一代操作系统Windows 12将深度集成AI,如果再加上的它…

彻底搞懂CPU的特权等级

x86 处理器中,提供了4个特权级别:0,1,2,3。数字越小,特权级别越高! 一般来说,操作系统是的重要性、可靠性是最高的,需要运行在 0 特权级; 应用程序工作在最上层,来源广泛、可靠性最低,工作在 3 特权级别。 中间的1 和 2 两个特权级别,一般很少使用。 理论上来讲,…

redis到底几个线程?

通常我们说redis是单线程指的是从接收客户端请求->解析请求->读写->响应客户端这整个过程是由一个线程来完成的。这并不意味着redis在任何场景、任何版本下都只有一个线程 为何用单线程处理数据读写? 内存数据储存已经很快了 redis相比于mysql等数据库是…

集合---list接口及实现类

一、list概述 1、list接口概述 List接口继承自Collection接口,是单列集合的一一个重要分支,我们习惯性地会将实现了 List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方 式进行有序存储的,在…

在linux中怎样同时运行三个微服务保证退出时不会终止

前言 1.maven中打jar包 使用插件打包,必须在pom.xml中添加插件,否则不能在linux中编译运行 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version&g…

RISC-V公测平台发布 · 第一个WEB Server “Hello RISC-V world!”

RISC-V公测平台Web Server地址&#xff1a;http://175.8.161.253:8081 一、前言 Web Server是互联网应用的基础设施&#xff0c;无论是用户访问网站&#xff0c;还是后端服务提供商和开发者构建各种应用程序&#xff0c;Web Server都在其中扮演着至关重要的角色。 显而易见…

甄品焕新 | 链接上下游企业服务协同,改变服务获取方式

文/玉娇龙 本文字数&#xff1a;3500&#xff5c;预计3分钟读完 使用燕千云上下游服务管理&#xff0c;你可以统一管理IT服务供应商、业务经销商、客户等业务伙伴的服务往来&#xff0c;将企业与上下游公司之间的工单服务往来进行统一管理、共享与升级&#xff0c;实现服务共享…

jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序&#xff1a; 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围&#xff1a; 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…

netty 809协议

netty 809协议 目录概述需求&#xff1a; 设计思路实现思路分析1.netty 809 协议2.概念代码 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for chan…

ad+硬件每日学习十个知识点(15)23.7.26 (逻辑器件、拉电流和灌电流、OC门和OD门、总线保持)

文章目录 1.逻辑器件介绍2.什么是总线缓冲器&#xff1f;3.逻辑器件按功能分类4.逻辑器件按工艺分类&#xff08;目前主要用CMOS逻辑&#xff09;5.什么是总线保持&#xff1f;6.逻辑电平7.两个逻辑器件互连&#xff0c;需要满足什么要求&#xff1f;8.什么是推挽&#xff0c;什…

关于自签名证书授权后在哪儿看

目录 firefox可以看到 chrome and edge firefox可以看到 chrome and edge 只能从打开的网站左上角进入

读《全球科技通史》总结——历史总在重演,科技永远向前

今天和大家分享一下吴军老师的《全球科技通史》。大部分人谈到历史的时候&#xff0c;关注的是国家的兴衰、王朝的更替&#xff0c;往往忽视了科技的力量。“文津图书奖”得主吴军博士&#xff0c;从科技视角串联历史&#xff0c;首次以能量和信息两条主线&#xff0c;系统阐述…

【Docker】Docker相关基础命令

目录 一、Docker服务相关命令 1、启动docker服务 2、停止docker服务 3、重启docker服务 4、查看docker服务状态 5、开机自启动docker服务 二、Images镜像相关命令 1、查看镜像 2、拉取镜像 3、搜索镜像 4、删除镜像 三、Container容器相关命令 1、创建容器 2、查…

ad+硬件每日学习十个知识点(9)23.7.20

文章目录 1.正点原子fpga开拓者无gui检查项目2.排针连接器A2541WR-XP-2P3.肖特基二极管反接在LDO的输出端&#xff0c;是什么用&#xff1f;4.在AD中如何实现批量元器件的移动&#xff1f;5.在PCB中&#xff0c;如何让元器件以任意角度旋转&#xff1f;6.接口设计都要做静电防护…

MIT学生揭示ChatGPT完成本科课程存在问题

一个机器学习工程师发推特说&#xff1a;“这太疯狂了&#xff01;”一家专注于人工智能新闻的账号称这是一项“开创性的研究”。这项研究声称&#xff0c;ChatGPT能够以100%的准确率完成麻省理工学院的数学、计算机科学和电气工程本科课程。 它每个问题都答对了。 然而&#…