MySQL 索引(一)

news2024/11/26 22:45:27

1.数据访问方式

MySQL 中,通常有两种方式访问数据库表的行数据:顺序访问索引访问

1.1.顺序访问

顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。实现比较简单,但是当表中有大量数据的时候,效率非常低下。

1.2. 索引访问

索引访问是通过遍历索引来直接访问表中记录行的方式。索引是一种用于快速查询和检索数据的数据库存储结构,保存了数据库指定字段的数据位置,类似图书目录的作用;

可以把索引比作新华字典的音序表。例如,要查“”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。

因此,索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能。

 

2. 如何创建索引 

语法形式:

ALTER TABLE `table_name` ADD INDEX 索引名 ( 字段名 );

 

3. 索引的优缺点

3.1.优点

  • 可以大大加快数据的查询速度,这是使用索引最主要的原因。
  • 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组排序的时间。
  • 通过创建唯一索引可以保证数据库表中每一行数据的唯一性,起到一定约束作用。

3.2.缺点

  • 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
  • 索引需要占用额外的磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
  • 当对表中的数据进行增删改时,索引需要动态维护,这样就降低了增删改的速度。

 

4. 索引分类

        索引的类型和存储引擎有关,每种存储引擎所支持的索引类型不一定完全相同。MySQL 中的索引,可以从存储方式使用逻辑实际使用等不同角度来进行分类。

4.1. 存储方式分

        根据数据结构存储方式的不同,MySQL 中常用的索引,在物理上分为 B+Tree 索引 HASH 索引两类,两种不同类型的索引各有其不同的适用范围。

4.1.1. B+Tree索引

BTree

B+TreeBTree的一种特殊变种。

首先,BTree是一个多路平衡查找树(Balance Tree,多路也就是多叉的意思),所有的叶子节点在同一高度,能够保持数据有序,同时BTree为系统大块数据的读写操作做了优化。

B+Tree

B+Tree在原有BTree的基础上补充了如下特性:

  • B+Tree 根节点和支节点没有数据区,数据data全部存储在叶子节点中;
  • 每一个父节点的值,都包含在叶子节点中,是叶子节点中最大(或最小)的元素;
  • 每一个叶子节点,都持有一个指向下一个叶子节点的指针,形成了有序链表;

 

BTreeB+Tree的主要区别:

  1. BTree的数据(或指向数据的指针)存在每个节点里,而 B+Tree的数据(或指向数据的指针)仅存在叶子节点里,非叶子节点只有索引。
  2. BTree 的查找,可能会在任意一个节点停止,而 B+Tree的查找相对稳定。
  3. B+Tree 的非叶子节点可以存储更多的索引值,阶数更高
  4. B+Tree 的叶子节点使用双向链表链接,提高顺序查询效率
  5. 相比于 BTreeB+Tree 在区间查找方面更胜一筹

MySQL为什么选择B+Tree

  1. B+Tree全表扫描能力更强。如果我们要根据索引去进行数据表的扫描,如果基于BTREE进行扫描,需要把整棵树遍历一遍,而B+TREE只需要遍历所有叶子节点即可。
  2. B+Tree排序能力更强。
  3. B+TREE磁盘读写能力更强。他的根节点和枝节点不保存数据区,所以根节点和枝节点同样大小的情况下,保存的关键字要比BTREE要多。所以,B+TREE读写一次磁盘加载的关键字比BTREE更多。
  4. B+Tree查询性能更稳定。B+Tree数据只保存在叶子节点,每次查询数据,查询IO次数一定是稳定的。

4.1.2. 哈希索引

        哈希索引也称为散列索引或 HASH 索引。MySQL 目前仅有 MEMORY存储引擎和 HEAP存储引擎支持这类索引。是基于哈希表实现的一种索引结构。将字段的内容(key)通过哈希算法,计算该字段的哈希值,用于访问哈希表结构中的对应索引,该索引指向数据行

哈希索引的特点

  • 无法用于排序与分组;
  • 只支持精确查找,无法用于部分查找和范围查找。
  • InnoDB 存储引擎有一个特殊的功能叫“自适应哈希索引”,当某个索引值被使用的非常频繁时,会在 B+Tree 索引之上再创建一个哈希索引,这样就让 B+Tree 索引具有哈希索引的优点,比如:快速的精准查找。

4.2. 使用逻辑分

4.2.1. 主键索引

主键索引就是专门为主键字段创建的索引,也属于索引的一种。主键索引是一种特殊的唯一索引,不允许值重复或者值为空。

创建主键索引通常使用 PRIMARY KEY 关键字。不能使用 CREATE INDEX 语句创建主键索引,需要以创建或修改表结构的方式进行添加。

示例:在表中的 id 字段上添加主键索引

ALTER TABLE 表名 ADD PRIMARY KEY (id)

4.2.2.普通索引

普通索引也被称为辅助索引。是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。

普通索引允许在定义索引的列中,插入重复值和空值。

创建普通索引时,通常使用的关键字是 INDEX

示例:tb_student 表中的 id 字段上建立名为 index_id 的索引。

CREATE INDEX index_id ON tb_student(id);

4.2.3. 唯一索引

唯一索引与普通索引类似,不同的是,创建唯一性索引的目的:除了提高访问速度以外,同时还能避免数据出现重复。

唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。

创建唯一索引通常使用 UNIQUE 关键字。

CREATE UNIQUE INDEX index_id ON tb_student(id);

4.2.4. 全文索引

全文索引主要用来查找文本中的关键字,只能在 CHARVARCHARTEXT 类型的列上创建。全文索引允许在索引列中插入重复值和空值。
不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。

创建全文索引使用 FULLTEXT 关键字

示例:tb_student 表中的 info 字段上建立名为 index_info 的全文索引。

CREATE FULLTEXT INDEX index_info ON tb_student(info);

4.3. 字段限制分

4.3.1. 单列索引

单列索引就是索引只包含原表的一个列。在表中的单个字段上创建索引,单列索引只根据该字段进行索引。可以是普通索引,也可以是唯一性索引,还可以是全文索引。

4.3.2. 组合索引

组合索引也称为复合索引或多列索引。相对于单列索引来说,是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。

注意:一个表可以有多个单列索引,但这些索引不是组合索引。一个组合索引实质上为表的查询提供了多个索引,以此来加快查询速度。

比如:在一个表中创建了一个组合索引(c1,c2,c3),在实际查询中,系统用来实际加速的索引有三个:单个索引(c1)、双列索引(c1,c2)和多列索引(c1,c2,c3)

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

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

相关文章

线性代数的本质(七)——特征值和特征向量

特征值和特征向量 本章特征值和特征向量的概念只在方阵的范畴内探讨。 相似矩阵 Grant:线性变换对应的矩阵依赖于所选择的基。 一般情况下,同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例,Grant 选用标准坐标系下的基向量 i…

YOLO物体检测-系列教程2:YOLOV2整体解读

🎈🎈🎈YOLO 系列教程 总目录 YOLOV1整体解读 YOLOV2整体解读 YOLOV2提出论文:YOLO9000: Better, Faster, Stronger 1、YOLOV1 优点:快速,简单!问题1:每个Cell只预测一个类别&…

微调语言模型前,需要考虑这三个关键方面

编者按:随着大语言模型(LLM)的迅速发展,越来越多团队希望针对特定领域进行模型微调。但是实践运用中总是存在一些困难,直接应用并不总是能达到理想效果。 本文着重探讨了三个关键问题: 利用强大模型(如ChatGPT)的输出结果来微调较弱模型是否有…

linux 强大的搜索命令 grep

单文件搜索grep 搜索内容 文件多文件搜索 grep -r ‘搜索内容’ 目录

cookie信息无法获取问题研究

背景 在oneapi这个前后端都有的开源项目中,我想接入chatnextweb到oneapi的后端。 由于需要二开chatnextweb,添加登录注册功能,考虑到java后端的性能问题和内存占用,决定不重启写个服务,而是将登录注册接入到oneapi的…

公司固定资产管理定制方案怎么写

有效的固定资产管理对企业的成功至关重要。然而,如何制定一套既符合公司需求又具有前瞻性的固定资产管理定制方案,是每个企业都需要面对的挑战。本文将从创新、流畅和清晰的角度出发,探讨如何撰写一份成功的固定资产管理定制方案。 创新  …

「聊设计模式」之工厂方法模式(Factory Method)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 设计模式是指在软件设计中,经过总结和提炼的&#…

雨量监测站:智能监测,超限提醒

在我们的日常生活和工作中,了解天气状况是非常重要的一环。而雨量监测站作为现代气象监测的重要组成部分,为我们提供了更加精准、实时的降雨信息。 一、提供精准的降雨数据 雨量监测站利用先进的仪器和设备,持续监测降雨量,为气象…

vue入门-->前后端分离vue简介,vue入门,vue生命周期

前后端分离&vue简介vue入门vue生命周期 1.前后端分离&vue简介 什么是前后端分离? 前后端分离,是开发模式上的前后端分离。 当然还有项目架构方面的前后端分离,也就是在考虑请求并发,服务器性能,处理请求的效率…

68、Spring Data JPA 的 方法名关键字查询(全自动,既不需要提供sql语句,也不需要提供方法体)

1、方法名关键字查询(全自动,既不需要提供sql语句,也不需要提供方法体) 2、Query查询(半自动:提供 SQL 或 JPQL 查询) 3、自定义查询(全手动) ★ 方法名关键字查询&…

微信超实用的隐藏功能:群发上千人,定时发圈,自动回复,一键转发朋友圈

多账号聚合 企业可将员工的工作微信聚合到系统上管理,在同一个页面就能同时收发多个微信的消息,无需频繁地切换设备与账号。将微信号分配给对应的员工,可对已有微信号进行监管。 群发无限制 微信自带的群发是有200人数限制的,对于…

android 点9记录

记录一个9点的4个边作用,左上表示拉伸的区域,需要2边都有黑点,如果只有一边,运行起来会有奇怪的投影,右边和下边默认拉满即可。

无涯教程-JavaScript - MUNIT函数

描述 MUNIT函数返回指定尺寸的单位矩阵。 语法 MUNIT (dimension)争论 Argument描述Required/OptionalDimension Dimension是一个整数,指定要返回的单位矩阵的尺寸。 尺寸必须大于零。 Required Notes MUNIT返回一个数组。因此,应将其作为数组公式输入 MUNIT (N)$\begin{m…

朴素贝叶斯案例分析

贝叶斯模型是利用先贝叶斯定理进行计算的一种机器学习模型,并且此处涉及先验概率和后验概率。比如我们都知道去赌场会十赌九输,此是以前的经验,即为先验概率,也或者大家都知道抛硬币时上下面第一次都是1/2概率,这均为先…

如何制作一篇公众号推文?纯干货

公众号推文是一种通过微信公众号平台向用户传播信息和内容的方式,具有广泛的受众群体和良好的传播效果。下面伯乐网络传媒给大家分享关于如何制作一篇公众号推文的一些建议和步骤,建议收藏起来慢慢看! 确定目标受众:在开始制作推文…

Matlab编程中函数的重命名方法

Matlab编程中函数的重命名方法 在进行matlab编程时候,有时需要根据自己的习惯,需要对函数重命名。本文简要介绍重命名的方法。 一、重命名的方法 通过和赋值号实现,如下所示: 新函数名原函数名二、具体举例 clc clear all %将…

第二章-H3C-网络设备操作入门

6.2 路由器与交换机的作用与特点 6.2.1 路由器的作用与特点 路由器的作用 1.连接具有不同介质的链路 2.连接网络或子网,隔离广播 3.对数据报文执行寻址和转发 4.交换和维护路由信息 6.2.2 交换机的作用与特点 交换机的作用 1.连接多个以太网物理网段,隔…

武汉凯迪正大—雷电冲击电压发生器

雷电冲击电压发生器系统特点 1.采用PLC可编程控制器技术,使控制系统实现超小型化及高可靠性能的智能自动控制和测量;配合我公司的数字化测控系统方便的与计算机连接,实现计算机智能自动控制、测量和管理 。 2.输出极…

不负昭华,前程似锦,新一批研发效能认证证书颁发丨IDCF

亲爱的认证学员, 恭喜你成功获得由国家工业和信息化部教育与考试中心颁发的职业技术证书——《研发效能(DevOps)工程师国家职业技术认证》。你的努力和才华得到了官方的认可,这是你职业生涯中的一个重要的里程碑。 这个证书不仅代表着你的专业知识和技…

JeecgBoot 低代码安装 运行开发

技术文档 技术官网: http://www.jeecg.com在线演示 : http://boot.jeecg.com标签 :BasicTable 表格 - JeecgBoot 文档中心入门视频: https://space.bilibili.com/454617261/channel/series 微服务开发: 单体切换为微…