扫描二维码,下载手机APP
下载安卓APP箭头

数据库的MySQL索引怎么实现?

作者:课课家教导 http://jscebj.com点击数:980发布时间:2019-09-02 11:05:01

图解MySQL索引:B-树¶••⊿B+树••。SQLite 是一个被大家低估的数据库,但有些人认为它是一个不合适生产环境应用的玩具数据库••。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层••。接下来,本文将与大家共同探讨 SQLite 在过去一年中最新的 SQL 功效••。

 看了很多关于索引的博客,讲的大同小异••。但是始终没有让我明确关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引….或许有很多人和我一样,没搞明确概念就开端研究B-Tree,B+Tree等结构,导致在面试的时候答非所问!

索引是什么?

索引是赞助MySQL高效获取数据的数据结构••。

索引能干什么?

进步数据查询的效率••。

索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序••。

一¶••⊿索引的分类

1️⃣从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引••。

2️⃣从利用层次来分:普通索引,唯一索引,复合索引••。

彩5593️⃣根据中数据的物理次序与键值的逻辑(索引)次序关系:凑集索引,非凑集索引••。

彩5591️⃣中所描写的是索引存储时保存的情势,2️⃣是索引应用过程中进行的分类,两者是不同层次上的划分••。不过平时讲的索引类型一般是指在利用层次的划分••。

就像手机分类,安卓手机,iOS手机 与 华为手机,苹果手机,OPPO手机一样••。

普通索引:即一个索引只包含单个列,一个表可以有多个单列索引

唯一索引:索引列的值必须唯一,但容许有空值

复合索引:即一个索引包含多个列

聚簇索引(凑集索引):并不是一种单独的索引类型,而是一种数据存储方法••。具体细节取决于不同的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技巧上来说是B+Tree)和数据行••。

彩559非聚簇索引:不是聚簇索引,就是非聚簇索引(认真脸)••。

二¶••⊿索引的底层实现

mysql默认存储引擎innodb只显式支撑B-Tree( 从技巧上来说是B+Tree)索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B树索引基础上建立hash索引,可以明显进步查找效率,对于客户端是透明的,不可把持的,隐式的••。

不谈存储引擎,只讨论实现(抽象)

Hash索引

基于哈希表实现,只有准确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列盘算一个哈希码(hash code),并且Hash索引将所有的哈希码存储在索引中,同时在索引表中保存指向每个数据行的指针••。

B-Tree能加快数据的访问速度,因为存储引擎不再需要进行全表扫描来获取数据,数据散布在各个节点之中••。

是B-Tree的改良版本,同时也是数据库索引索引所采用的存储结构••。数据都在叶子节点上,并且增长了次序访问指针,每个叶子节点都指向相邻的叶子节点的地址••。相比B-Tree来说,进行领域查找时只需要查找两个节点,进行遍历即可••。而B-Tree需要获取所有节点,相比之下B+Tree效率更高••。

案例:假设有一张学生表,id为主键

在MyISAM引擎中的实现(二级索引也是这样实现的)

在InnoDB中的实现

三¶••⊿问题

问:为什么索引结构默认应用B-Tree,而不是hash,二叉树,红黑树?

hash:虽然可以快速定位,但是没有次序,IO复杂度高••。

彩559二叉树:树的高度不均匀,不能自平衡,查找效率跟数据有关(树的高度),并且IO代价高••。

红黑树:树的高度随着数据量增长而增长,IO代价高••。

问:为什么官方建议应用自增长主键作为索引••。

联合B+Tree的特点,自增主键是持续的,在插入过程中尽量减少页决裂,即使要进行页决裂,也只会决裂很少一部分••。并且能减少数据的移动,每次插入都是插入到最后••。总之就是减少决裂和移动的频率••。

插入持续的数据:

插入非持续的数据

 

 我们应用SQL数据库其实就是应用很多表,数据库是由表组成的,而数据也是以表的情势展现出来的,表是列的集合也是信息数据的容器,很多表就构成了数据库••。这篇文章讲解如何应用表组织数据,使数据库的结构完整性••。下面我们采用个案例:建立学生数据库表来讲解如何创立数据库应用表组织数据••。
赞(14)
踩(0)
评论(0
最新评论

暂无评论~

大数据课程
幸运农场开户网 幸运农场如投注 幸运赛车开奖直播 qq分分彩开奖平台 极速赛车投注平台 九亿九彩票开户平台 九亿九彩票彩559 腾讯分分彩直播网 PK10牛牛投注官网 PK10牛牛投注平台