赞
踩
无聊~突然想尝试着默写一下索引与事务中的知识点,顺带总结总结面试常考问题,默写完在文章后面继续补充默写中没有提及的重要知识点。
~~单纯的尝试尝试看能记住多少
面试中如果遇到这样的概念问题,我个人是比较倾向于大家边画图边和HR解释,很多时候面试官想听的并不是我们能熟练的背出各种问题的标准概念,相反他们更想听到的是我们对于一个概念原理的内化,我们自己理解的索引(事务)是什么,有什么作用。
废话说了那么多,那么到底什么是索引呢?
其实字面意思已经告诉我们了,索—搜索,引—指引,书本—目录,是不是想到了什么,索引其实就是数据库的目录,就这么简单,当书本有了目录整本书的逻辑结构边一目了然,提高了查询效率。
这个问题用书本–目录这个例子来解释,大家不妨想想,一本书多了目录,很明显多用了几页纸张。换成数据库中的索引自然就占用了硬盘的空间~~,但是有一个问题,数据库可能随时要进行增删查改,要修改索引,这个时候也就会浪费很多时间。当然大部分情况只是查询。
答案:索引背后是靠B+树来实现的。学完数据结构之后现在想想数据结构其实还挺好玩的~
答案:哈希表做不到进行范围查询。但是数据库是一定需要范围查询的。
最容易想到的就是使用二叉搜索树来实现索引,但是使用树形结构难免要遇到一个问题,那就是树的高度,当数据库中的数据变多的时候,显然树的高度就会变得非常高,IO次数就会变多。效率会变得非常低,反观B+树,N叉树的优点就被体现的淋漓尽致~。可以说B+树这种数据结构就像为索引量身定做的一样。
B树呢大概是这样~
B+树大概是这样~ 下面的叶子节点用链表结构连接起来。
打字打累了~~,
举一个例子吧:事务这玩意就像我们平时去银行转账一样,我们给别人转账过去一笔N亿资金,那么一定是要你转账的要求申请给电脑,然后把你的钱吞进机器,一系列操作进行完后你转账的对象才会收到一条到账的信息。转账过程中就两步骤,一个就是吞钱一个就是收到到账信息,这两步骤其实就是一个整体,缺少任意一个步骤都不能完成,总不能说你钱被吞了之后却收不到到账信息,或者收到到账N个亿信息结果另一边压根没出钱。显然银行不会这样给你占便宜。把这些步骤给聚合在一起看作一个整体就是事务,其中只要有一个环节出错那么代表全部都错。
主要是补充事务中的
隔离性的第三小点应该是不可复读~
事务的基本特性第四点应该是持久性~
事务的实现机制的核心是“回滚”,“回滚”的依据就是MySQL要记录之前执行的一些过程~
可能有些地方有错误,欢迎指正~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。