【测试——数据库】

1.平衡二叉树、B树和B+树是什么,区别

二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”;
平衡二叉树(AVL树)在符合二叉查找树(左子树的键值小于根的键值,右子树的键值大于根的键值)的条件下,还满足任何节点的两个子树的高度最大差为1;

B树

B树就是为了存储设备或者磁盘设计的一种平衡查找树
1)树中的每个节点最多有m个孩子
2)除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子
3)若根节点不是叶子节点,则根节点最少含有两个孩子
4)所以叶子节点都在同一层,叶子节点不包含任何关键字信息

B树的插入
1)若B树中已存在需要插入的键值时,用新的键值替换旧值;
2)若B树中不存在这个值,则在叶子节点进行插入操作;

B+树

B树的一种变形,它把数据都存储在叶子节点,内部只存关键字(其中叶子节点的最小值作为索引)和孩子指针,简化了内部节点。
B+树插入
B+树插入:
1)若为空树直接插入
2)对于叶子结点:根据key找到叶子结点,对叶子结点进行插入操作。插入后如果当前叶子结点的key值数b不大于m-1,则插入结束
3)对于索引结点:如果当前结点的key个数小于等于m-1,插入结束。

3.区别

为什么B+树比B树更适合做系统的数据库索引和文件索引?
1)B+树的磁盘读写代价更低
因为B+树内部结点没有指向关键字具体信息的指针,内部结点相对B树小
2)B+树的查询更加稳定
因为非终端结点并不是指向文件内容的结点,仅仅是作为叶子结点的关键字索引,因此所有的关键字查询都会走一条从根节点到叶子结点的路径。即s所有关键字查询的长度是一样的,查询效率稳定。

既然Hash比B+树更快,为什么MySQL用B+树来存储索引呢?
MySQL中存储索引用到的数据结构是B+树,B+树的查询时间跟树的高度有关,是log(n),如果用hash存储,那么查询时间是O(1)。
采用Hash来存储确实要更快,但是采用B+树来存储索引的原因主要有以下两点:
1.从内存角度上说,数据库中的索引一般是在磁盘上,数据量大的情况可能无法一次性装入内存,B+树的设计可以允许数据分批加载。
2.从业务场景上说,如果只选择一个数据那确实是hash更快,但是数据库中经常会选中多条,这时候由于B+树索引有序,并且又有链表相连,它的查询效率比hash就快很多了

2.并发问题(脏读、幻读、丢弃更改、不可重复读)

脏读:读脏数据指在不同的事务下,当前事务可以读到另外事务未提交的数据。例如:T1修改一个数据但未提交,T2随后读取这个数据。如果T1撤销了这次修改,那么T2读取的数据是脏数据。

幻读:幻读本质上也属于不可重复读的情况,T1读取某个范围的数据,T2在这个范围内插入新的数据,T1再次读取这个范围的数据,此时读取的结果和第一次读取的结果不同。

丢弃修改:指一个事务的更新操作被另外一个事务的更新操作替换。例如:T1和 T2两个事务都对一个数据进行修改,T1先修改并提交生效,T2随后修改,T2的修改覆盖了T1的修改。

不可重复读:在这一事务还未结束前,另一事务也访问了该同一数据集合并做了修改,由于第二个事务的修改,第一次事务的两次读取的数据可能不一致。

3.隔离级别

未提交读:事务中的修改,即使没有提交,对其它事务也是可见的。(可能导致脏读、幻读和不可重复读)

提交读:一个事务只能读取已经提交的事务所做的修改。(可以阻止脏读)

可重复读:保证在同一个事务中多次读取同一数据的结果是一样的。(可以阻止脏读、不可重复度)

可串行化:强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。该隔离级别需要加锁加粗样式实现,因为要使用加锁机制保证同一时间只有一个事务执行,也就是保证事务串行执行。(可以阻止脏读、幻读和不可重复读)

4.什么是索引,作用、优点,有哪些

索引是数据库管理系统中一个排序的数据结构索引就相当于目录,实现通常使用B树及其变种B+树。

优点
可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点
创建索引和维护索引要耗费时间,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
索引需要占物理空间

索引有哪些?
主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。

5.数据库分类

网络数据库
网络数据库是指把数据库技术引入到计算机网络系统中,借助于网络技术将存储于数据库中的大量信息及时发布出去,而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中的数据库进行实时动态数据交互。

层级数据库
层次结构模型实质上是一种有根节点的定向有序树(在数学中“树”被定义为一个无回的连通图)。

关系数据库
关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

6.悲观锁、乐观锁

悲观锁:就是一种悲观心态的锁,每次访问数据时都会锁定数据
乐观锁:一种乐观心态的锁,每次访问数据时并不锁定数据,期待数据并没作修改,如果数据没被修改则作具体的业务。

适用场景:
1.响应速度:如果需要非常高的响应速度,建议采用乐观锁方案,成功就执行,不成功就失败,不需要等待其他并发去释放锁
2.冲突频率:如果冲突频率非常高,建议采用悲观锁,保证成功率,如果冲突频率大,乐观锁会需要多次重试才能成功,代价比较大
3.重试代价:如果重试代价大,建议采用悲观锁

7.请你说一下数据库事务

数据库的事务:事务即用户定义的一个数据库操作序列,这些操作要么全做要全不做,是一 个不可分割的工作单位,它具有四个特性,ACID,原子性,一致性,隔离性,持续性

8.主键与外键的区别?

主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

9.数据库如何优化

调整数据结构的设计,对于经常访问的数据库表建立索引
调整 SQL 语句, 可以使用一些语句优化器、行锁管理器(来调整优化 SQL 语句。
减少数据访问,比如:不要使用BY RAND()命令,尽量避免SELECT *命令
调整服务器内存分配。是在运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA 区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA 区)的大小。
调整硬盘I/O,DBA 可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬 盘之间I/O负载均衡。

9.索引失效

如果条件中有or,即使其中有条件带索引也不会使用 (这也是为什么尽量少用or的原因)
like查询是以%开头
如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
对于多列索引,不是使用的第一部分,则不会使用索引

10.联合索引

联合索引是什么?
对多个字段同时建立的索引(有顺序,ABC,ACB是完全不同的两种联合索引。)

为什么要使用联合索引
减少开销。

建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,col2),(col1,col2,col3)三个索引。每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用联合索引会大大的减少开销!

覆盖索引
在真正的实际应用中,覆盖索引是主要的提升性能的优化手段之一。
效率高。
索引列越多,通过索引筛选出的数据越少。有1000W条数据的表,有如下sql:select from table where col1=1 and col2=2 and col3=3,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出1000W10%=100w条数据,然后再回表从100w条数据中找到符合col2=2 and col3= 3的数据,然后再排序,再分页;如果是联合索引,通过索引筛选出1000w10% 10% *10%=1w,效率提升可想而知

11.SQL中有哪些索引

普通索引:仅加速查询
唯一索引:加速查询 + 列值唯一(可以有null)
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
全文索引:对文本的内容进行分词,进行搜索
索引合并:使用多个单列索引组合搜索
覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖
聚簇索引:表数据是和主键一起存储的,主键索引的叶结点存储行数据(包含了主键值),二级索引的叶结点存储行的主键值。使用的是B+树作为索引的存储结构,非叶子节点都是索引关键字,但非叶子节点中的关键字中不存储对应记录的具体内容或内容地址。叶子节点上的数据是主键与具体记录(数据内容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值