数据库面试问题汇总
php_数据库面试题及答案(3篇)

第1篇1. 请简要介绍数据库的基本概念和分类。
答:数据库是按照数据结构来组织、存储和管理数据的仓库。
它包含一系列相互关联的数据集。
数据库分为关系型数据库和非关系型数据库两大类。
2. 什么是SQL?请列举几个常用的SQL语句。
答:SQL(Structured Query Language)是一种标准化的查询语言,用于管理关系型数据库。
常用的SQL语句包括:- SELECT:查询数据- INSERT:插入数据- UPDATE:更新数据- DELETE:删除数据- CREATE:创建数据库或表- DROP:删除数据库或表- ALTER:修改数据库或表结构3. 请解释以下SQL语句的含义:- SELECT FROM students WHERE age > 18;- INSERT INTO employees (name, age, salary) VALUES ('张三', 25, 5000);- UPDATE students SET age = 20 WHERE name = '李四';- DELETE FROM employees WHERE age = 30;答:- SELECT FROM students WHERE age > 18;:查询年龄大于18岁的学生信息。
- INSERT INTO employees (name, age, salary) VALUES ('张三', 25, 5000);向员工表插入一条记录,姓名为张三,年龄为25岁,薪资为5000元。
- UPDATE students SET age = 20 WHERE name = '李四';将姓名为李四的学生年龄修改为20岁。
- DELETE FROM employees WHERE age = 30;删除年龄为30岁的员工记录。
4. 什么是索引?请举例说明索引的作用。
数据库面试题目及答案

数据库面试题目及答案数据库面试是程序员求职过程中必不可少的一部分。
在面试中,面试官通常会提出各种与数据库相关的问题,以考察面试者对数据库的理解和应用能力。
本文将介绍一些常见的数据库面试题目,并提供相应的答案,希望能帮助读者在面试中取得好成绩。
1. 什么是数据库?答案:数据库是存储和组织数据的集合。
它是一个可以持久存储的数据集合,可以通过各种操作进行管理和访问。
2. 什么是关系型数据库?答案:关系型数据库是基于关系模型的数据库管理系统。
它使用表(关系)来组织数据,并通过主键和外键等约束保持表之间的关联性。
3. 什么是主键?答案:主键是一个唯一标识符,用于唯一地标识关系中的每一行。
它可以是一个或多个列,并且不允许有重复的值。
4. 什么是外键?答案:外键是关系模型中用来建立表之间关系的一种机制。
它用于在一个表中引用另一个表的主键。
5. 什么是索引?答案:索引是为了提高数据库查询性能而创建的数据结构。
它可以加快数据的查找速度,类似于书籍的目录。
6. 请解释一下数据库范式?答案:数据库范式是创建和规范化数据库表的一种方法。
它分为不同的级别(第一范式、第二范式、第三范式等),每个级别都有一些规则,用于减少数据冗余和提高数据的完整性。
7. 什么是事务?答案:事务是一系列数据库操作的集合,它们要么全部执行成功,要么全部回滚。
事务具有四个特性,即原子性、一致性、隔离性和持久性(ACID)。
8. 请解释一下数据库的ACID原则?答案:ACID是指数据库事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
原子性指事务要么全部执行成功,要么全部回滚;一致性指事务在执行之前和之后数据库的状态必须保持一致;隔离性指多个事务之间应该相互隔离,互不干扰;持久性指一旦事务提交,其结果将永久保存在数据库中。
9. 什么是数据库连接池?答案:数据库连接池是一种管理和复用数据库连接的机制。
oracle数据库面试题目(3篇)

第1篇1. 请简述Oracle数据库的体系结构,并说明各层的作用。
2. 请解释什么是Oracle实例?实例与数据库之间的关系是什么?3. 请简述Oracle数据库的存储结构,包括数据文件、控制文件、日志文件等。
4. 请说明Oracle数据库的内存结构,包括SGA、PGA等。
5. 请解释Oracle数据库的备份策略,包括全备份、增量备份、差异备份等。
6. 请说明Oracle数据库的恢复策略,包括不完全恢复、完全恢复等。
7. 请解释Oracle数据库的事务管理,包括事务的ACID特性。
8. 请说明Oracle数据库的锁机制,包括共享锁、排他锁等。
9. 请解释Oracle数据库的并发控制,包括多版本并发控制(MVCC)。
10. 请说明Oracle数据库的安全机制,包括角色、权限、用户等。
二、SQL语言1. 请简述SQL语言的组成,包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等。
2. 请说明如何创建一个简单的表,包括表结构、字段类型、约束等。
3. 请编写一个查询语句,查询某个表中所有年龄大于30岁的记录。
4. 请编写一个更新语句,将某个表中年龄大于40岁的记录的年龄加1。
5. 请编写一个删除语句,删除某个表中年龄小于20岁的记录。
6. 请编写一个插入语句,插入一条记录到某个表中。
7. 请说明如何使用SQL语句实现分页查询。
8. 请说明如何使用SQL语句实现多表查询。
9. 请说明如何使用SQL语句实现子查询。
10. 请说明如何使用SQL语句实现联合查询。
三、Oracle高级特性1. 请解释什么是视图?如何创建视图?2. 请解释什么是索引?有哪些常见的索引类型?3. 请解释什么是触发器?如何创建触发器?4. 请解释什么是存储过程?如何创建存储过程?5. 请解释什么是函数?如何创建函数?6. 请解释什么是包?如何创建包?7. 请解释什么是序列?如何创建序列?8. 请解释什么是同义词?如何创建同义词?9. 请解释什么是物化视图?如何创建物化视图?10. 请解释什么是分区表?如何创建分区表?四、Oracle性能优化1. 请说明如何查看Oracle数据库的性能统计信息。
数据库工程师面试题及答案(全)

数据库工程师面试题及答案1.请简要介绍你对数据库的理解以及你的数据库工作经验?答:数据库是一种可以存储、管理和检索数据的软件系统。
作为一名数据库工程师,我的主要工作职责包括设计和管理数据库系统、调优和优化数据库性能、实现数据备份和恢复、确保数据安全和隐私保护等。
我拥有多年的数据库工作经验,擅长使用MySQL、Oracle、SQL Server等数据库管理系统,对SQL语言和数据库优化有深入的了解。
2.请介绍一下数据库索引的原理和常用类型?答:数据库索引是一种数据结构,可以加速数据检索的速度和效率。
常见的索引类型包括B+树索引、哈希索引、全文索引等。
其中,B+树索引是最常用的索引类型,它采用平衡树结构来存储数据,可以支持快速的范围查找和排序操作。
哈希索引是一种使用哈希函数将数据映射到索引中的索引类型,可以支持快速的精确查找操作。
全文索引是一种可以在文本中进行模糊匹配的索引类型,可以支持全文搜索和关键词查询。
3.请介绍一下数据库事务的概念和ACID特性?答:数据库事务是一组需要被看作为一个单独的操作执行的SQL语句集合。
为了确保数据的完整性和一致性,事务需要满足ACID特性。
ACID是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
⏹原子性:事务中的所有操作要么全部执行成功,要么全部失败,不存在中间状态。
⏹一致性:事务执行前后,数据库中的数据保持一致性状态。
⏹隔离性:事务之间的操作互相隔离,一个事务的执行不应该影响其他事务。
⏹持久性:事务执行成功后,其所做的修改应该被持久化存储,不会因为系统故障等原因丢失。
4.请简述一下数据库优化的方法和技巧?答:数据库优化是提高数据库性能和响应速度的重要手段,常用的方法和技巧包括:⏹合理设计和优化数据库结构,避免冗余和无用数据。
⏹创建适当的索引,加快数据检索速度。
⏹使用分区表,优化大数据表的查询速度。
数据库面试问题汇总

数据库面试问题汇总1.数据库管理命令1.1查询所有数据库---- show databases;1.2创建数据库,并将数据库字符集默认为utf-8----create database day814----default character set utf8-----;1.3查看数据库的默认字符集----show create database day814;1.4 删除数据库---- drop database day15;1.5 修改数据库(即修改数据库的默认字符集)-----alert database day814 default character set gbk;2.表管理命令2.1选择数据库命令----- use day814;2.2查看所有表---- show tables;2.3 创建表---- create table student(-----sid int,-----sage int,-----sname varchar(20)-----);2.4 查看表结构------desc student;2.5 删除表----- drop table student;2.6 修改表添加字段-----alter table student add column sgender varchar(2);删除字段-----alter table studnet drop column s gender;修改字段类型-----alter table student modify column sgender varchar(100);修改字段名称-----alter table student change column sgender gender varchar(100);修改表名称-----alter table student rename to teacher;3.数据管理3.1增删改数据-----增加数据INSERT INTO student VALUES(1,’tom’,20,2);//要严格按照表的字段顺序插入数据增加部分数据INSERT INTO student (id,name) VALUES(2,’tina’);-----删除数据条件删除DELETE FROM student WHERE id=2;注意:DELETE FROM和TRUNCATE FROM的区别DELETE FROM:可以全表删除,也可以条件删除,只能删除数据,不能删除约束,最后删除之后,可以回滚事务;TRUNCATE FROM: 只能全表删除,不能条件删除,即可以删除表的数据,也可以删除表的约束,不能回滚事务;-----修改数据带条件修改UPDATE student SET age=1,name=’tom’ WHERE id=2;3.2查询数据(重点)3.2.1查询所有列(*通配符)---SELECT * FROM student;3.2.2查询指定列---SELECT sid,sname, gender FROM student;3.2.3查询时添加常量列---SELECT sid,sname,gender,sage,’java_Class’ AS ‘sgrade’ FROM student;//在查询student表时,添加一个sgrade列,内容为java_Class;3.2.4查询时合并列---SELECT sid,sname,(servlet+jsp) AS ‘总成绩’ FROM student;3.2.5查询时去除重复记录---SELECT DISTINCT gender FROM student;---SELECT DISTINCT address FROM student;3.2.6条件查询(模糊条件查询)---逻辑条件AND(与) OR(或)SELECT * FROM student WHERE sid=2 AND sname=’c++’; //交集SELECT * FROM student WHERE sid=2 OR sname=’张三’; //并集---比较条件<, >,<= 最重要的<>不等于,另外BETWEEN ANDSELECT * FROM student WHERE jsp<=90 AND jsp>=75;---判空条件需求:查询地址为null的学生(包括null和空字符串)注意:NULL 表示没有值空字符串表示有值的;LIKE 表示模糊条件; %表示任意字符SELECT * FROM student WHERE sname LIKE ‘j%’;3.2.7聚合查询常用的聚合函数:sum() \ avg() \ max() \ min() \ count() \SELECT MAX(jsp) AS ‘max_score’ FROM student;SELECT AVG(jsp) AS ‘average score ‘ FROM student;这里注意:count统计数据不包含null的数据3.2.8 分页查询查询第1,2 条记录SELECT * FROM student LIMIT 0,2;//注意:LIMIT 0:起始行行数,2:总行数;3.2.9 查询排序ASC: 升序;DESC 降序SELECT * FROM student ORDER BY sid ASC;SELECT * FROM student ORDER BY servlet ASC;SELECT * FROM student ORDER BY servlet ASC,jsp DESC;3.2.10分组查询-- 2.11 分组查询(group by)--需求:查询男女的人数--预期结果:--男3---女2--算法步骤:1) 把学生按照性别分组(GROUP BY gender)--2) 统计每组的人数(COUNT(*))SELECT gender,COUNT(*) FROM student GROUP BY gender;3.2.11分组查询后筛选-- 2.12 分组查询后筛选--需求:查询总人数大于2的性别--算法:1) 查询男女的人数--2)筛选出人数大于2的记录(having)---注意:分组之前条件使用where关键字,分组之后条件使用having关键字SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;综上,所有的SQL语句指令,主要包含3个部分:数据库管理、表管理、数据管理。
数据库面试题及答案

数据库面试题及答案在数据库领域的面试中,常常会遇到各种各样的问题。
这些问题涵盖了数据库的基本概念、SQL语言、数据库设计、性能优化等方面。
本文将为您详细介绍一些常见的数据库面试题及其答案,以帮助您在面试中更好地表现自己。
1. 什么是数据库的事务(transaction),并描述ACID特性。
答:事务是数据库中一系列操作的逻辑单位,要么全部执行成功,要么全部失败回滚。
ACID特性包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
2. 请解释一下SQL语言中的DDL、DML和DQL的概念。
答:DDL(Data Definition Language)用于定义数据库的结构或模式,如CREATE、ALTER和DROP等操作。
DML(Data Manipulation Language)用于操作数据库中的数据,如INSERT、UPDATE和DELETE等操作。
DQL(Data Query Language)用于查询数据库中的数据,如SELECT等操作。
3. 什么是数据库索引,以及为什么要使用索引?答:数据库索引是一种特殊的数据结构,用于加速对数据库表中数据的查询。
使用索引可以减少查询数据的IO消耗,提高查询效率。
索引的创建需要占用额外的存储空间,并在数据变更时维护索引,因此需要权衡存储空间和查询性能之间的关系。
4. 请简要介绍关系数据库设计中的三大范式。
答:第一范式(1NF)要求字段具有原子性,即每个字段的值不可再分。
第二范式(2NF)要求表中的非主键字段完全依赖于主键,不能存在部分依赖。
第三范式(3NF)要求表中的非主键字段与主键字段不存在传递依赖。
5. 如何进行数据库性能优化?答:数据库性能优化可以从多个方面入手。
首先,合理设计数据库结构,包括表、索引和关联等。
其次,编写高效的SQL查询语句,避免全表扫描和重复查询。
再次,定期优化数据库的配置参数,如缓冲区大小、连接数等。
数据库面试题大全

数据库面试题大全以下是一些常见的数据库面试题目:1. 什么是数据库?请简要描述数据库的基本概念。
2. 请解释一下关系型数据库和非关系型数据库的区别。
3. 什么是SQL?请简要描述SQL的作用和用途。
4. 什么是主键和外键?请举例说明它们在数据库中的作用。
5. 什么是索引?请简要描述索引的作用和优缺点。
6. 请解释一下事务的概念,以及事务的隔离级别。
7. 请解释一下数据库的连接池和它的作用。
8. 什么是数据库触发器?请简要描述触发器的作用和用途。
9. 什么是存储过程?请简要描述存储过程的作用和用途。
10. 什么是视图?请简要描述视图的作用和用途。
11. 请解释一下数据库的规范化,以及规范化的好处。
12. 请解释一下数据库的性能优化,以及如何进行性能优化。
13. 请描述一下你如何处理数据库中的重复数据。
14. 什么是数据库备份和恢复?请简要描述备份和恢复的方法。
15. 请解释一下数据库的并发控制,以及并发控制的方法。
16. 请解释一下数据库的分区,以及分区的好处。
17. 什么是数据库的乐观锁和悲观锁?请简要描述它们的区别和用途。
18. 请解释一下数据库的日志和日志的重要性。
19. 什么是数据库的联接?请简要描述不同类型的联接(如内联接、左外联接、右外联接、全外联接等)。
20. 请解释一下数据库的索引,以及如何使用索引来提高查询性能。
21. 请解释一下数据库的性能优化,以及如何进行性能优化。
22. 什么是数据库的安全性?如何保证数据库的安全性?23. 请解释一下数据库的视图,以及视图的用途和优点。
24. 什么是数据库的游标?游标在数据库中有什么用途?25. 请解释一下数据库的存储过程和函数,以及它们的用途和优点。
数据库常问面试题

数据库常问面试题
1.用一句话介绍什么是MySQL?
2.对MySQL数据库去重的关键字是什么?
3.MySQL多表连接有哪些方式?怎么用的?这些连接都有什么区别?
4.MySQL数据库和Redis的区别?
5.说一下索引的优势和劣势?
6.什么是死锁?怎么解决?
7.什么是视图?为什么要使用视图?
8.视图有哪些特点?使用场景有哪些?
9.讲一下视图的优缺点?
10.MySQL的约束有哪些?
11.UNION和UNION ALL的区别?
12.关心过业务系统里面的sql耗时吗?对慢查询都怎么优化过?
13.主键使用自增ID还是UUID,为什么?
14.MySQL数据库cpu飙升的话,要怎么处理呢?
15.什么是存储过程?有哪些优缺点?
16.日常工作中,你是怎么优化sql的?
17.什么情况下应不建或少建索引?
18.了解什么是表分区吗?表分区的好处有哪些?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库面试问题汇总1.数据库管理命令1.1查询所有数据库---- show databases;1.2创建数据库,并将数据库字符集默认为utf-8----create database day814----default character set utf8-----;1.3查看数据库的默认字符集----show create database day814;1.4 删除数据库---- drop database day15;1.5 修改数据库(即修改数据库的默认字符集)-----alert database day814 default character set gbk;2.表管理命令2.1选择数据库命令----- use day814;2.2查看所有表---- show tables;2.3 创建表---- create table student(-----sid int,-----sage int,-----sname varchar(20)-----);2.4 查看表结构------desc student;2.5 删除表----- drop table student;2.6 修改表添加字段-----alter table student add column sgender varchar(2);删除字段-----alter table studnet drop column s gender;修改字段类型-----alter table student modify column sgender varchar(100);修改字段名称-----alter table student change column sgender gender varchar(100);修改表名称-----alter table student rename to teacher;3.数据管理3.1增删改数据-----增加数据INSERT INTO student VALUES(1,’tom’,20,2);//要严格按照表的字段顺序插入数据增加部分数据INSERT INTO student (id,name) VALUES(2,’tina’);-----删除数据条件删除DELETE FROM student WHERE id=2;注意:DELETE FROM和TRUNCATE FROM的区别DELETE FROM:可以全表删除,也可以条件删除,只能删除数据,不能删除约束,最后删除之后,可以回滚事务;TRUNCATE FROM: 只能全表删除,不能条件删除,即可以删除表的数据,也可以删除表的约束,不能回滚事务;-----修改数据带条件修改UPDATE student SET age=1,name=’tom’ WHERE id=2;3.2查询数据(重点)3.2.1查询所有列(*通配符)---SELECT * FROM student;3.2.2查询指定列---SELECT sid,sname, gender FROM student;3.2.3查询时添加常量列---SELECT sid,sname,gender,sage,’java_Class’ AS ‘sgrade’ FROM student;//在查询student表时,添加一个sgrade列,内容为java_Class;3.2.4查询时合并列---SELECT sid,sname,(servlet+jsp) AS ‘总成绩’ FROM student;3.2.5查询时去除重复记录---SELECT DISTINCT gender FROM student;---SELECT DISTINCT address FROM student;3.2.6条件查询(模糊条件查询)---逻辑条件AND(与) OR(或)SELECT * FROM student WHERE sid=2 AND sname=’c++’; //交集SELECT * FROM student WHERE sid=2 OR sname=’张三’; //并集---比较条件<, >,<= 最重要的<>不等于,另外BETWEEN ANDSELECT * FROM student WHERE jsp<=90 AND jsp>=75;---判空条件需求:查询地址为null的学生(包括null和空字符串)注意:NULL 表示没有值空字符串表示有值的;LIKE 表示模糊条件; %表示任意字符SELECT * FROM student WHERE sname LIKE ‘j%’;3.2.7聚合查询常用的聚合函数:sum() \ avg() \ max() \ min() \ count() \SELECT MAX(jsp) AS ‘max_score’ FROM student;SELECT AVG(jsp) AS ‘average score ‘ FROM student;这里注意:count统计数据不包含null的数据3.2.8 分页查询查询第1,2 条记录SELECT * FROM student LIMIT 0,2;//注意:LIMIT 0:起始行行数,2:总行数;3.2.9 查询排序ASC: 升序;DESC 降序SELECT * FROM student ORDER BY sid ASC;SELECT * FROM student ORDER BY servlet ASC;SELECT * FROM student ORDER BY servlet ASC,jsp DESC;3.2.10分组查询-- 2.11 分组查询(group by)--需求:查询男女的人数--预期结果:--男3---女2--算法步骤:1) 把学生按照性别分组(GROUP BY gender)--2) 统计每组的人数(COUNT(*))SELECT gender,COUNT(*) FROM student GROUP BY gender;3.2.11分组查询后筛选-- 2.12 分组查询后筛选--需求:查询总人数大于2的性别--算法:1) 查询男女的人数--2)筛选出人数大于2的记录(having)---注意:分组之前条件使用where关键字,分组之后条件使用having关键字SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;综上,所有的SQL语句指令,主要包含3个部分:数据库管理、表管理、数据管理。
SQL语句分类:数据定义语言、数据查询语言、数据操作语言。
4.1 默认值4.2非空4.3唯一4.4 主键(==非空+唯一)5.数据库设计:三大范式第一范式:要求表的每个字段必须是不可分割的独立单元;比如student : nameJava\狗娃应该改为name oldnameJava 狗娃第二范式:在第一张范式基础上,要求每张表只表达一个意思,表的每个字段都和主键有依赖;employee(员工): 员工编号员工姓名部门名称订单名称--违反第二范式员工表:员工编号员工姓名部门名称订单表:订单编号订单名称--符合第二范式第三范式:在第二范式的基础上,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系;员工表:员工编号(主键)员工姓名部门编号部门名--符合第二范式,违反第三范式(数据冗余高)员工表:员工编号(主键)员工姓名部门编号--符合第三范式(降低数据冗余)部门表:部门编号部门名解析:个人对数据库三大范式的理解:首先数据表中的每个字段都必须是不可分割的独立单元;其次,在第一范式的基础上,要求每张表只表达一个意思,表的每个字段都和主键有依赖;最后,在第二范式的基础上,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。
6.存储过程带有逻辑的SQL语句,存储过程带上流过程控制语句(if else for while);(1)存储过程执行效率非常快,因为是在服务端执行;(2)存储过程移植性比较差,不同数据的存储过程是不能移植的;7.数据库索引实现原理1.关于数据库索引采用的数据结构题目1:Mysql数据库用过吧?l里面的索引是基于什么数据结构。
答:主要是基于Hash表和B+树题目2:很好请你说一下B+树的实现细节是什么样的?B-树和B+树有什么区别?联合索引在B+树中如何存储?答: 首先,数据库使用树型结构来增加查询效率,并保持有序。
那么,为什么不使用二叉树来实现数据结构呢,二叉树算法时间复杂度是lg(N),查询速度和比较次数都是较小的。
实际上,查询索引操作最耗资源的不在内存中,而是磁盘IO。
索引是存在磁盘上的,当数据量比较大的时候,索引的大小可能达到几个G。
那么,我们利用索引进行查询的时候,不可能把索引直接加载到内存中,只能一次读取一个磁盘页,一个磁盘页对应着一个节点,一次读取操作时一个磁盘io。
在二叉树查询时,最坏的情况下查找的次数是树的高度,即io次数为树的高度。
B-树就是比二叉树“矮胖”的树。
二叉树的特征如下:1. 根节点至少有两个子女2. 每个中间节点包含k-1个元素和k个孩子,其中m/2 <= k <= m3. 每个叶子节点包含k-1个元素,其中m/2 <= k <= m4. 所有叶子节点位于同一层5. 节点中的元素从小到大排列,正好是孩子节点的值域。
(就是孩子节点的元素都比父节点中元素的最小值大,比父节点元素的最大值小)B-树查询的次数并不比二叉树的次数小,但是相比起磁盘io速度,内存中比较的耗时就不足为提了。
所以只要树的高度足够低,io次数少,就可以提升查找性能。
而每个节点中有多个元素,都只在内存中操作。
而B+树是基于B-树的,增加了如下规则:1. 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2. 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3. 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
所以,B+树对比B-树有如下好处:io次数少:b+树中间节点只存索引,不存在实际的数据,所以可以存储更多的数据。
索引树更加的矮胖,io次数更少。
性能稳定:b+树数据只存在于叶子节点,查询性能稳定范围查询简单:b+树不需要中序遍历,遍历链表即可。
B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;数据库索引采用B+树的主要原因是B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题。