concat走索引_MySQL 索引相关

本文详细介绍了MySQL中的索引基础知识,包括B+树查找过程、聚焦索引和辅助索引的区别,以及如何创建和使用索引。强调了索引在提升查询性能中的重要作用,如减少IO次数,并探讨了回表查询、覆盖索引、索引合并和最左前缀匹配特性等概念。
摘要由CSDN通过智能技术生成
6fc8590b47125df1b08261d304c95619.gif

点击关注,我们共同每天进步一点点!

1 基础知识

   一张数据表中具有百万级的数据时,如何精确且快速的拿出其中某一条或多条记录成为了人们思考的问题。

   InnoDB存储引擎的出现让这个问题得到了很好的解决,InnoDB存储引擎是以索引来进行数据的组织,而索引在MySQL中也被称之为键,因此UNIQUE KEY,PRIMARY KEY约束字段会作为索引字段。

   当没有明确指出PRIMAY KEY时,InnoDB存储引擎会自动的创建一个6字节的隐藏主键用于组织数据,但是由于该主键是隐藏的所以对查询没有任何帮助。

   索引相当于一本大字典的目录,有了目录来找想要的内容就快很多,否则就只能进行一页一页的遍历查询

2 查找过程

   索引的查找过程是依照B+树算法进行查找的,而每一张数据表都会有一个且只能有一个与之对应的树

92db21ac8d72f294d0f99b97b9d9c118.png

   只有最下面一层节点中存储一整行记录
   第二层及第一层中黄色部分为指针

   如图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的B+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。

3 索引分类

   索引分为聚集索引与辅助索引

3.1 聚焦索引

   聚集索引是会直接按照B+树进行查询,由于B+树的底层叶子节点是一整行记录,所以聚集索引能够十分快速的拿到一整行记录。

   值得注意的是,一张数据表中只能有一个聚集索引。

25ab725c925ca67736a66e3b866169e9.png

3.2 辅助索引

   辅助索引的树最底层的叶子节点并不会存储一整行记录,而是只存储单列索引的数据,并且还存储了聚集索引的信息。

   通过辅助索引进行查询时,先拿到自身索引字段的数据,再通过聚集索引拿到整行记录,也就是说辅助索引拿一整行记录而言需要最少两次查询。

   而一张数据表中可以有多个辅助索引。

c3551b7ef6080083472a69c4d79b4240.png

4 创建索引

4.1索引类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值