数据库两大必备神器:索引和锁底层原理是什么!
副标题[/!--empirenews.page--]
【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道
一、索引 在之前,我对索引有以下的认知:
看起来好像啥都知道,但面试让你说的时候可能就GG了:
1、聊聊索引的基础知识 首先Mysql的基本存储结构是页(记录都存在页里边):
所以说,如果我们写select * from user where username = 'Java3y'这样没有进行任何优化的sql语句,默认会这样做:
很明显,在数据量很大的情况下这样查找会很慢! 2、索引提高检索速度 索引做了些什么可以让我们查询加快速度呢? 其实就是将无序的数据变成有序(相对): 要找到id为8的记录简要步骤: 很明显的是:没有用索引我们是需要遍历双向链表来定位对应的页,现在通过"目录"就可以很快地定位到对应的页上了! 其实底层结构就是B+树,B+树作为树的一种实现,能够让我们很快地查找出对应的记录。 3、索引降低增删改的速度 如果一棵普通的树在极端的情况下,是能退化成链表的(树的优点就不复存在了) B+树是平衡树的一种,是不会退化成链表的,树的高度都是相对比较低的(基本符合矮矮胖胖(均衡)的结构)【这样一来我们检索的时间复杂度就是O(logn)】!从上一节的图我们也可以看见,建立索引实际上就是建立一颗B+树。
4、哈希索引 除了B+树之外,还有一种常见的是哈希索引。 哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。
看起来哈希索引很牛逼啊,但其实哈希索引有好几个局限(根据他本质的原理可得):
5、InnoDB支持哈希索引吗? 主流的还是使用B+树索引比较多,对于哈希索引,InnoDB是自适应哈希索引的(hash索引的创建由InnoDB存储引擎引擎自动优化创建,我们干预不了)! 6、聚集和非聚集索引 简单概括:
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |