当前位置:网站首页>MySQL索引
MySQL索引
2022-06-13 04:16:00 【leejie*.】
MySQL索引
什么是索引?
定义:索引是一种排好序的快速查找的数据结构,他帮助数据库高效的进行数据的检索。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(额外的存储空间),这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高效的查找算法。这个数据结构就叫做索引。
索引一般以索引文件的形式存放在磁盘中,目前大多数索引都是采用B+树方式构建。
索引类型
主键索引
索引列中的值必须是唯一的,不允许有空值;
普通索引
基本索引类型,允许在定义索引的列中插入重复值和空值。
唯一索引
索引列中的值必须是唯一的,但是允许为空值。
全文索引
只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引。 MyISAM和InnoDB中都可以使用全文索引。
索引数据结构
mysql索引采用的数据结构为B+树,B树和B+树最主要的区别在于非叶子节点是否存储数据的问题。
B+树:只有叶子节点才会存储数据,非叶子节点只存储键值。叶子节点之间使用双向指针连接,最底层的叶子节点形成了一个双向有序链表。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yaCQYqoD-1654767182523)(C:\Users\Leejie\Desktop\leejie\笔记\image\B+Tree.png)]
B+树的最底层叶子节点包含了所有的索引项。B+树查找数据时。由于数据都存放在最底层的叶子节点上,所以每次查找都需要检索到叶子节点才能查询到数据。所以在需要查询数据的情况下每次的磁盘IO跟树高有直接的关系,由于数据都被放到了叶子节点,所以放索引的磁盘块所存放的索引数量是会跟着增加的,所以相对B树,B+树的树高理论上是比B树要矮的。也存在索引覆盖查询的情况,在索引中数据满足了当前查询语句所需要的全部数据,此时只需要找到索引即可立刻返回,不需要检索到最底层的叶子节点。
存储引擎
MySQL的两种存储引擎的索引实现:MyISAM索引和InnoDB索引。
myISAM索引
myISAM索引的数据文件和索引文件是分开存储的。MyISAM使用B+树构建索引树时,叶子节点中存储的键值为索引列的值,数据为索引所在行的磁盘地址。
注意:MyISAM在查询时,会将索引节点缓存在MySQL缓存中,而数据缓存依赖于操作系统自身的缓存,所以并不是每次都是走的磁盘。
InnoDB索引
InnoDB的主键索引也就是聚簇索引。每个InnoDB表都有一个聚簇索引,叶子节点存储的数据是整行记录。
InnoDB创建索引的具体规则如下:
- 在表上定义主键PRIMARY KEY,InnoDB将主键索引用作聚簇索引。
- 如果表没有定义主键,InnoDB会选择第一个不为NULL的唯一索引列用作聚簇索引。
- 如果以上两个都没有,InnoDB 会使用一个6 字节长整型的隐式字段 ROWID字段构建聚簇索引。该ROWID字段会在插入新行时自动递增。
除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。 在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。
使用辅助索引需要检索两遍索引:首先检索辅助索引获得主键,然后使用主键到主索引中检索获得记录。根据在辅助索引树种获取的主键id,到主键索引树检索数据的过程称为回表查询。
覆盖索引
覆盖索引是一种很常用的优化手段。因为在使用辅助索引的时候,我们只可以拿到主键值,相当于获取数据还需要再根据主键查询主键索引再获取到数据。但是试想下这么一种情况,在上面abc_innodb表中的组合索引查询时,如果我只需要abc字段的,那是不是意味着我们查询到组合索引的叶子节点就可以直接返回了,而不需要回表。这种情况就是覆盖索引。
边栏推荐
- 2022 spring semester summary
- 5g China Unicom ap:b SMS ASCII transcoding requirements
- EGO Planner代码解析----CMakeLists.txt和package.xml
- Use the visual studio code terminal to execute the command, and the prompt "because running scripts is prohibited on this system" will give an error
- 史上最详细的Swin-Transformer 掩码机制(mask of window attentation)————shaoshuai
- leetcode. 1 --- sum of two numbers
- Goframe day 5
- Reread the classic: end to end object detection with transformers
- The most detailed swing transformer mask of window attachment in history -- Shaoshuai
- 1.4.2 Capital Market Theroy
猜你喜欢

Difference between OKR and KPI

手机私有充电协议解读

knife4j aggregation 2.0.9支持路由文档自动刷新

电磁兼容常用名词术语

R: Employee turnover forecast practice

Among the four common technologies for UAV obstacle avoidance, why does Dajiang prefer binocular vision

Sword finger offer II 022 Entry node of a link in a linked list

Intervention analysis + pseudo regression

单片机:红外遥控通信原理
![[kubernetes series] pod chapter actual operation](/img/ac/fb563f3d92e6fdbd36e41d2f213556.jpg)
[kubernetes series] pod chapter actual operation
随机推荐
【LeetCode】860. Change with lemonade (2 brushes for wrong questions)
单片机:A/D(模数转换)的主要指标
Summary of meeting between president Ren and scientists and experts in system engineering
5G China unicom 直放站 网管协议 实时性要求
Answer private message @ Tiantian Wx //2022-6-12 C language 51 single chip microcomputer led analog traffic light
高等数学(第七版)同济大学 习题1-2 个人解答
Redis数据持久化
Use the visual studio code terminal to execute the command, and the prompt "because running scripts is prohibited on this system" will give an error
R: Employee turnover forecast practice
Single chip microcomputer: main index of a/d (analog-to-digital conversion)
Ego planner code analysis ----cmakelists Txt and package xml
leetcode. 1 --- sum of two numbers
单片机:A/D 和 D/A 的基本概念
SQL 进阶挑战(1 - 5)
重读经典:《End-to-End Object Detection with Transformers》
JSTL -- JSP standard tag library
Translation of ego planner papers
Modeling discussion series 143 data processing, analysis and decision system development
Lambda termination operation find and match anymatch
Use ASE encryption and decryption cache encapsulation in Vue project