mysql索引

2022-02-17  本文已影响0人  阿duang_638a

一条查询语句是如何执行的

  1. 当执行 SQL 语句时,应用程序会连接到相应的数据库服务器,然后服务器对 SQL 进行处理。
  2. 接着数据库服务器会先去查询是否有该 SQL 语句的缓存,key 是查询的语句,value 是查询的结果。如果你的查询能够直接命中,就会直接从缓存中拿出 value 来返回客户端。
  3. 如果没有命中缓存,则开始第三步。
  1. 最后,数据库服务器将查询结果返回给客户端。(如果查询可以缓存,MySQL 也会将结果放到查询缓存中)

这就是一条查询语句的执行流程,可以看到索引出现在优化 SQL 的流程步骤中,接下来了解索引到底是什么?

索引简介

索引是什么

索引是帮助数据库高效获取数据的数据结构。

索引的分类

从存储结构上来划分

从应用层次上来划分

从表记录的排列顺序和索引的排列顺序是否一致来划分

聚集索引和非聚集索引

聚集索引

以主键创建的索引
聚集索引在叶子节点存储的是表中的数据。

聚集索引表记录的排列顺序和索引的排列顺序一致,所以查询效率快,因为只要找到第一个索引值记录,其余的连续性的记录在物理表中也会连续存放,一起就可以查询到。

缺点:新增比较慢,因为为了保证表中记录的物理顺序和索引顺序一致,在记录插入的时候,会对数据页重新排序。

非聚集索引

以非主键创建的索引(也叫做二级索引)
非聚集索引在叶子节点存储的是主键和索引列。

索引的逻辑顺序与磁盘上行的物理存储顺序不同,非聚集索引在叶子节点存储的是主键和索引列,当我们使用非聚集索引查询数据时,需要拿到叶子上的主键再去表中查到想要查找的数据。这个过程就是我们所说的回表。

索引底层数据结构

索引的底层是怎么实现的呢?为什么索引可以如此高效地进行数据的查找?如何设计数据结构可以满足我们的要求?

哈希索引

可能直接想到的就是用哈希表来实现快速查找,就像我们平时用的 hashmap 一样,value = get(key) O(1)时间复杂度一步到位,确实,哈希索引 是一种方式。

哈希索引就是采用一定的哈希算法,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。本质上就是把键值换算成新的哈希值,根据这个哈希值来定位。

在 MySQL 常用的 InnoDB 引擎中,还是使用 B+树索引比较多。InnoDB 是自适应哈希索引的(hash 索引的创建由 ==InnoDB 存储引擎自动优化创建==,我们干预不了)。

B树

B+树

了解了 B 树,再来看一下 B+树,也是 MySQL 索引大部分情况所使用的数据结构。

相对 B 树,B+树做索引的优势

https://blog.csdn.net/wangfeijiu/article/details/113409719
https://zhuanlan.zhihu.com/p/29118331
https://www.runoob.com/mysql/mysql-index.html
https://www.cnblogs.com/zsql/p/13808417.html
https://www.infoq.cn/article/OJKWYykjoyc2YGB0Sj2c
https://blog.csdn.net/dengchenrong/article/details/88425762
https://zhuanlan.zhihu.com/p/73204847

上一篇 下一篇

猜你喜欢

热点阅读