加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

口试中有哪些经典的数据库题目?

发布时间:2018-08-18 15:13:37 所属栏目:编程 来源:程序员之言
导读:技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战 一、为什么用自增列作为主键 1、假如我们界说了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚积索引、假如没有显式界说主键,则InnoDB会选择第一个不包括有NULL值的独一索引作为
副问题[/!--empirenews.page--] 技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战

口试中有哪些经典的数据库题目?

一、为什么用自增列作为主键

1、假如我们界说了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚积索引、假如没有显式界说主键,则InnoDB会选择第一个不包括有NULL值的独一索引作为主键索引、假如也没有这样的独一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚积索引(ROWID跟着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。

2、数据记录自己被存于主索引(一颗B+Tree)的叶子节点上。这就要求统一个叶子节点内(巨细为一个内存页或磁盘页)的各条数据记录按主键次序存放,因此每当有一条新的记录插入时,MySQL会按照其主键将其插入恰当的节点和位置,假如页面到达装载因子(InnoDB默以为15/16),则开发一个新的页(节点)

3、假如表行使自增主键,那么每次插入新的记录,记录就会次序添加到当前索引节点的后续位置,当一页写满,就会自动开发一个新的页

4、假如行使非自增主键(假如身份证号或学号等),因为每次插入主键的值近似于随机,因此每次新记载都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到吻合位置而移动数据,乃至方针页面也许已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读返来,这增进了许多开销,同时频仍的移动、分页操纵造成了大量的碎片,获得了不足紧凑的索引布局,后续不得不通过OPTIMIZE TABLE来重建表并优化添补页面。

二、为什么行使数据索引能进步服从

1、数据索引的存储是有序的

2、在有序的环境下,通过索引查询一个数据是无需遍历索引记录的

3、极度环境下,数据索引的查询服从为二分法查询服从,趋近于 log2(N)

三、B+树索引和哈希索引的区别

B+树是一个均衡的多叉树,从根节点到每个叶子节点的高度差值不高出1,并且同层级的节点间有指针彼此链接,是有序的

口试中有哪些经典的数据库题目?

哈希索引就是回收必然的哈希算法,把键值换算成新的哈希值,检索时不必要相同B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可,是无序的

口试中有哪些经典的数据库题目?

四、哈希索引的上风:

1、等值查询。哈希索引具有绝对上风(条件是:没有大量一再键值,假如大量一再键值时,哈希索引的服从很低,由于存在所谓的哈希碰撞题目。

五、哈希索引不合用的场景:

1、不支持范畴查询

2、不支持索引完成排序

3、不支持连系索引的最左前缀匹配法则

凡是,B+树索引布局合用于绝大大都场景,像下面这种场景用哈希索引才更有上风:

在HEAP表中,假如存储的数据一再度很低(也就是说基数很大),对该列数据以等值查询为主,没有范畴查询、没有排序的时辰,出格得当回收哈希索引,譬喻这种SQL:

  1. select id,name from table where name='李明'; — 仅等值查询 

而常用的InnoDB引擎中默认行使的是B+树索引,它会及时监控表上索引的行使环境,假如以为成立哈希索引可以进步查询服从,则自动在内存中的“自顺应哈希索引缓冲区”成立哈希索引(在InnoDB中默认开启自顺应哈希索引),通过调查搜刮模式,MySQL会操作index key的前缀成立哈希索引,假如一个表险些大部门都在缓冲池中,那么成立一个哈希索引可以或许加速等值查询。

留意:在某些事变负载下,通过哈希索引查找带来的机能晋升宏大于特另外监控索引搜刮环境和保持这个哈希表布局所带来的开销。但某些时辰,在负载高的环境下,自顺应哈希索引中添加的read/write锁也会带来竞争,好比高并发的join操纵。like操纵和%的通配符操纵也不合用于自顺应哈希索引,也许要封锁自顺应哈希索引。

六、B树和B+树的区别

1、B树,每个节点都存储key和data,全部节点构成这棵树,而且叶子节点指针为nul,叶子结点不包括任何要害字信息。

口试中有哪些经典的数据库题目?

2、B+树,全部的叶子结点中包括了所有要害字的信息,及指向含有这些要害字记录的指针,且叶子结点自己依要害字的巨细自小而大的次序链接,全部的非终端结点可以当作是索引部门,结点中仅含有其子树根结点中最大(或最小)要害字。 (而B 树的非终节点也包括必要查找的有用信息)

口试中有哪些经典的数据库题目?

七、为什么说B+比B树更得当现实应用中操纵体系的文件索引和数据库索引?

1、B+的磁盘读写价钱更低B+的内部结点并没有指向要害字详细信息的指针。因此其内部结点相对B树更小。假如把全部统一内部结点的要害字存放在统一盘块中,那么盘块所能容纳的要害字数目也越多。一次性读入内存中的必要查找的要害字也就越多。相对来说IO读写次数也就低落了。

2、B+-tree的查询服从越发不变因为非终结点并不是最终指向文件内容的结点,而只是叶子结点中要害字的索引。以是任何要害字的查找必需走一条从根结点到叶子结点的路。全部要害字查询的路径长度沟通,导致每一个数据的查询服从相等。

八、MySQL连系索引

1、连系索引是两个或更多个列上的索引。对付连系索引:Mysql从左到右的行使索引中的字段,一个查询可以只行使索引中的一部份,但只能是最左侧部门。譬喻索引是key index (a,b,c). 可以支持a 、 a,b 、 a,b,c 3种组合举办查找,但不支持 b,c举办查找 .当最左侧字段是常量引用时,索引就异常有用。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读