当前位置:网站首页>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字段的,那是不是意味着我们查询到组合索引的叶子节点就可以直接返回了,而不需要回表。这种情况就是覆盖索引。
边栏推荐
- Lambda termination operation find and match anymatch
- Interpretation of usb-if bc1.2 charging protocol
- MCU: RS485 communication and Modbus Protocol
- 重读经典:《End-to-End Object Detection with Transformers》
- Lambda end operation collect
- Lambda termination operation find and match nonematch
- [automated test] what you need to know about unittest
- 1.4.2 Capital Market Theroy
- Dumi builds a document blog
- Lambda end operation find and match allmatch
猜你喜欢
Understand the pseudo static configuration to solve the 404 problem of refreshing the page of the deployment project
10 minutes to thoroughly understand how to configure sub domain names to deploy multiple projects
Dumi builds a document blog
Among the four common technologies for UAV obstacle avoidance, why does Dajiang prefer binocular vision
基于PHP的轻量数码商城系统
Translation of ego planner papers
Principle, composition and functions of sensors of Dajiang UAV flight control system
Introduction to MCU peripherals: temperature sensor DS18B20
手机私有充电协议解读
How to use debounce in lodash to realize anti shake
随机推荐
[kubernetes series] pod chapter actual operation
Introduction to MCU peripherals: temperature sensor DS18B20
基于DE2-115平台的VGA显示
Goframe day 4
dumi 搭建文檔型博客
Single chip microcomputer: pcf8591 application program
高等数学(第七版)同济大学 习题1-2 个人解答
knife4j aggregation 2.0.9支持路由文档自动刷新
建模杂谈系列143 数据处理、分析与决策系统开发的梳理
史上最详细的Swin-Transformer 掩码机制(mask of window attentation)————shaoshuai
Common encryption and decryption function encapsulation - AES encryption and decryption
Translation of ego planner papers
Reread the classic: end to end object detection with transformers
How to use debounce in lodash to realize anti shake
Differences and relations between three-tier architecture and MVC
Principle, composition and functions of sensors of Dajiang UAV flight control system
Alipay native components (hotel time selection)
十億數據量 判斷元素是否存在
重读经典:《End-to-End Object Detection with Transformers》
Example of try catch finally execution sequence