前言
只有光头才能变强索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的 。
本文力求简单讲清每个知识点,希望大家看完能有所收获
声明:如果没有说明具体的数据库和存储引擎,默认指的是MySQL中的InnoDB存储引擎一、索引
在之前,我对索引有以下的认知:
- 索引可以加快数据库的检索速度表经常进行INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度 。索引需要占物理和数据空间 。了解过索引的最左匹配原则知道索引的分类:聚集索引和非聚集索引Mysql支持Hash索引和B+树索引两种
- 使用索引为什么可以加快数据库的检索速度?。课?裁此邓饕?峤档筒迦搿⑸境?⑿薷牡任?と挝竦乃俣?。索引的最左匹配原则指的是什么?Hash索引和B+树索引有什么区别?主流的使用哪一个比较多?InnoDB存储都支持吗?聚集索引和非聚集索引有什么区别?........
首先Mysql的基本存储结构是页(记录都存在页里边):
文章插图
文章插图
- 各个数据页可以组成一个双向链表而每个数据页中的记录又可以组成一个单向链表每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录 。
- 页与页之间是双向链表,页内是单链表 。需要沿着双向链表,从第一页开始,依次遍历每一页,最终找到对应的数据
1.2索引提高检索速度
索引做了些什么可以让我们查询加快速度呢?
其实就是将无序的数据变成有序(相对):
文章插图
要找到id为8的记录简要步骤:
文章插图
很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过**“目录”**就可以很快地定位到对应的页上了!
其实底层结构就是B+树 , B+树作为树的一种实现,能够让我们很快地查找出对应的记录 。
参考资料:
- Mysql索引
B+树是平衡树的一种 。
平衡树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树 。如果一棵普通的树在极端的情况下 , 是能退化成链表的(树的优点就不复存在了)
文章插图
B+树是平衡树的一种,是不会退化成链表的,树的高度都是相对比较低的(基本符合矮矮胖胖(均衡)的结构)【这样一来我们检索的时间复杂度就是O(logn)】!从上一节的图我们也可以看见,建立索引实际上就是建立一颗B+树 。
- B+树是一颗平衡树,如果我们对这颗树增删改的话,那肯定会破坏它的原有结构 。要维持平衡树,就必须做额外的工作 。正因为这些额外的工作开销,导致索引会降低增删改的速度
- ***blogs.com/wade-luffy/p/6292784.html
除了B+树之外,还有一种常见的是哈希索引 。
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置 , 速度非常快 。
- 本质上就是把键值换算成新的哈希值,根据这个哈希值来定位 。
文章插图
看起来哈希索引很牛逼?。?但其实哈希索引有好几个局限(根据他本质的原理可得):
- 哈希索引也没办法利用索引完成排序不支持最左匹配原则在有大量重复键值情况下,哈希索引的效率也是极低的---->哈希碰撞问题 。不支持范围查询
推荐阅读
- 林正英葬礼两大诡异事件,曾留古怪遗言:千万别让人看见我的尸体
- 低温烫伤神器有哪些 保暖神器真的会导致低温烫伤吗
- 这一次父亲节,王健林迎来了“两大喜讯”!
- 《扫黑风暴》徐英子、马帅之死,两大嫌疑人浮出水面,导演用心了
- 00级神器可以继承
- 《超新星运动会》官宣回归,嘉宾阵容曝光,两大顶流助阵成焦点!
- 游泳耳朵不进水小窍门 游泳防耳朵进水的神器
- 两大动作巨星李连杰和吴京会面,疑合作新片《镖人》,期待值拉满
- 目的基因的获取方法3种,获取目的基因的两大途径是什么
- 40集《时光正好》今晚开播,演员阵容强大,两大看点,有爆款潜质