点击上方 Java后端,选择 设为星标
优质文章,及时送达
看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引….或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问!
索引是什么?
索引是帮助MySQL高效获取数据的数据结构。
索引能干什么?
提高数据查询的效率。
索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序。公众号:Java后端 发布过几十篇 MySQL 文章,其中包括索引的文章,可以关注后后台回复 666 获取。
一、索引的分类
1. 从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。
2. 从应用层次来分:普通索引,唯一索引,复合索引。
3. 根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。
1 中所描述的是索引存储时保存的形式,2 是索引使用过程中进行的分类,两者是不同层次上的划分。不过平时讲的索引类型一般是指在应用层次的划分。
就像手机分类,安卓手机,IOS手机 与 华为手机,苹果手机,OPPO手机一样。
-
普通索引:即一个索引只包含单个列,一个表可以有多个单列索引
-
唯一索引:索引列的值必须唯一,但允许有空值
-
复合索引:即一个索引包含多个列
-
聚簇索引(聚集索引):并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技术上来说是B+Tree)和数据行。
-
非聚簇索引:不是聚簇索引,就是非聚簇索引(认真脸)。
二、索引的底层实现
mysql默认存储引擎innodb只显式支持B-Tree( 从技术上来说是B+Tree)索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B树索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。
Hash索引
三、问题
。同时标星(置顶)本公众号可以第一时间接受到博文推送。
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
相关文章
暂无评论...