数据库(2)

目录

6.buffer pool,redo log buffer和undo logo,redo logo,bin log概念以及关系?

7.从准备更新一条数据到事务的提交的流程描述?

8.能说下myisam和innodb的区别吗?

9.说下MySQL的索引有哪些吧?

10.什么是B+树?为什么B+树成为主要对的SQL数据库的索引实现?

6.buffer pool,redo log buffer和undo logo,redo logo,bin log概念以及关系?

        buffer pool是MySQL的一个非常重要的组件,因为针对数据库的增删改操作都是在buffer pool中完成的。

        undo log记录的是数据操作前的样子

        redo log记录的是数据被操作后的样子(redo log是innodb存储引擎特有)。

        bin log记录的是整个操作记录(这个对于主从复制具有非常重要的意义)。

7.从准备更新一条数据到事务的提交的流程描述?

首先执行器根据MySQL的执行计划来查询数据,先是从缓存池中查询数据,如果没有就会去数据库中查询,如果查询到了就将其放到缓存池中。

在数据被缓存到缓存池的同时,会写入undo log日志文件。

更新的动作是在bufferpool中完成的,同时会将更新后的数据添加到redo log buffer中。

完成以后就可以提交事务,在提交的同时会做以下三件事:

将redo log buffer中的数据刷入到redo log文件中,

将本次操作记录写入到bin log文件中,

将bin log文件名字和更新内容在bin log中的位置记录到redo log中,同时在redo log最后添加commit标记。

8.能说下myisam和innodb的区别吗?

myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。

innodb是基于B+tree索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存放在一起。

9.说下MySQL的索引有哪些吧?

索引在什么层面?

首先,索引是在存储引擎层实现的,而不是在服务层实现的,所以不同存储引擎具有不同的索引类型和实现。

有哪些?

B+tree索引

是大多数MySQL存储引擎的默认索引类型。

哈希索引

哈希索引能以o(1)时间进行查找,但是失去了有序性;

Innodb存储引擎 有一个特殊的功能叫"自适应哈希索引",当某个索引值被使用的非常频繁时,会在B+tree索引之上再创建一个哈希索引,这样就让B+tree索引具有哈希索引的一些优点,比如快速的哈希查找。

全文索引

myisam存储引擎支持全文索引,用于查找文本中的关键词,而不是直接比较是否相等。查找条件使用match against,而不是普通的where。

全文索引一般使用倒排索引实现,它记录着关键词到其所在文档的映射。

Innodb存储索引在MySQL 5.6.4版本也开始支持全文索引。

空间数据索引

myisam存储索引支持空间数据索引,可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。

10.什么是B+树?为什么B+树成为主要对的SQL数据库的索引实现?

什么是B+树?

B+树是基于B tree和叶子节点顺序访问指针进行实现,它具有b tree的平衡性,并且通过顺序访问指针来提高区间查询的性能。在B+树中,一个节点中的key从左到右非递减排列,如果某个指针的左右相邻key分别是keyi和keyi+1,且不为null,则该指针指向节点的所有key大于等于keyi且小于等于keyi+1。

为什么是B+tree?

为了减少磁盘读取次数,决定了树的高度不能高,所以鼻血是先b-tree;

以页为单位读取使得一次I/O就能完全载入一个节点,且相邻的节点也能够被预先载入;所以数据放在叶子节点,本质上是一个page页;

为了支持范围查询以及关联关系,页中数据需要有序,且页的尾部节点指向下个页的头部。

B+树索引可以分为聚簇索引和非聚簇索引?

        1.主索引就是聚簇索引(也称为聚集索引,clusteres index);

        2.辅助索引(有时也称为非聚簇索引或者二级索引,secondary index,non-cluster index)。

如上图,主键索引的叶子节点保存的是真正的数据。而辅助索引叶子节点的数据区保存的是主键索引关键字的值。

假如要查询name=C的数据,其搜索过程如下:1)现在辅助索引中通过C查询最后找到主键id=9;

2)在主键索引中搜索id=9的数据,最终在主键索引的叶子节点中获取到真正的数据。所以通过辅助索引进行检索,需要检索两次索引。

之所以这样设计,一个原因就是:如果和myisam一样在主键索引和辅助索引的叶子节点中都存放数据行索引指针,一旦数据发生迁移,则需要去重新组织维护所有的索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值