数据库
- 1.索引的基本原理
- 2.聚簇和非聚簇索引的区别
- 3.mysql索引的数据结构以及各自的优劣
- 4.索引的设计原则
- 5.事务的基本特性和隔离级别
- 6.mysql主从同步原理
- 7.简述MyISAM和InnoDB的区别
- 8.简述mysql中索引类型及对数据库性能的影响
- 9.Explain语句结果中各个字段分别表示什么
- 10.索引覆盖是什么
- 11.最左前缀原则是什么
- 12.Innodb是如何实现事务的
- 13.B树和B+树的区别,为什么myesql使用B+树
- 14.mysql慢查询该如何优化
- 15.数据库设计三范式
- 16.左连接、右连接、笛卡尔积、全连接和内连接的区别
- 17.SQL约束有哪几种
- 18.事务的特性
- 19.事务的隔离级别
- 20.索引的优缺点,什么时候使用索引,什么时候不能使用索引
- 21.什么是数据库连接池 为什么需要数据库连接池
- 22.B+树
- 23.聚集索引和非聚集索引的区别
- 24.为什么推荐使用整形自增的主键而不是用UUID
1.索引的基本原理
索引用来快速的寻找那些具有特定值的记录,如果没有索引,一般来说执行查询时遍历整张表
索引的原理:就是把无序的数据变成有序的查询
(1)把创建了索引的列的内容进行排序
(2)对排序结果生成倒排表
(3)在倒排表内容上拼上数据地址链
(4)在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到数据
2.聚簇和非聚簇索引的区别
都是B+树的数据结构
(1)聚簇索引:将数据存储与索引放到一块,并且是按照一定顺序组织的,找到索引也就找到了数据,
数据的物理存放顺序与索引顺序一致。
(2)非聚簇索引:叶子节点不存储数据,存储的是数据行地址,也就是根据索引查找到数据行的位置
再取磁盘查找数据数据。
3.mysql索引的数据结构以及各自的优劣
4.索引的设计原则
查询更快、占用空间更小
5.事务的基本特性和隔离级别
基本特性:
(1)原子性:一个事务中的操作要么全部成功,要么全部失败
(2)一致性:数据库总是从一个一致性的状态转换到另外一个一致性的状态
(3)隔离性:一个事务的修改在最终提交之前,对其他事务是不可见的
(4)持久性:一个事务一旦提交,所做的修改就会永久的保存到数据库中
隔离级别:
(1)读未提交:可能会读到其他事务未提交的数据,也叫做脏读
(2)读已提交:解决了脏读,但是没有解决不可重复读,也就是两次读取的结果不一致
(3)可重复读:解决了不可重复读,但是没有解决幻影读。这是mysql的默认隔离级别
(4)串行:一般是不会使用的,因为他会给每行数据都加锁,会导致大量的超时和锁竞争问题
脏读:某个事务已更新一份数据,但是还未提交,另一个事务在此时读取了同一份数据,由于某些原因,
前一个事务进行了RollBack操作,则后一个事务读取到的数据就是不正确的
不可重复读:在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务
更新的原有的数据
6.mysql主从同步原理
7.简述MyISAM和InnoDB的区别
8.简述mysql中索引类型及对数据库性能的影响
(1)普通索引:允许被索引的数据列包含重复的值
(2)唯一索引:可以保证数据记录的唯一性
(3)主键索引:是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录
(4)联合索引:索引可以覆盖多个数据列
(5)全文索引:通过建立倒排索引,可以极大的提升索引效率,解决判断字段是否包含的问题,
是目前搜索引擎使用的一种关键技术
对数据库性能的影响:
(1)索引可以极大的提高数据的查询速度
(2)通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统的性能
(3)但是会降低插入、更新、删除表的速度,因为在执行这些写操作时,还要操作索引文件
9.Explain语句结果中各个字段分别表示什么
10.索引覆盖是什么
索引覆盖就是在一个SQL执行时,可以利用索引来快速查找,并且此SQL所要查询的字段在当前索引对应的字段中都包含了,
那么此SQL走完索引后不用回表了,所需要的字段都在当前索引的叶子节点上存在,可以直接作为结果返回了
11.最左前缀原则是什么
12.Innodb是如何实现事务的
13.B树和B+树的区别,为什么myesql使用B+树
14.mysql慢查询该如何优化
(1)检查是否走了索引,如果没有则优化SQL利用索引
(2)检查所利用的索引是否是最优索引
(3)检查所查字段是否都是必须的,是否查询了过多字段,查出了多余数据
(4)检查表中数据是否过多,是否应该进行分库分表了
15.数据库设计三范式
(1)第一范式:每个表都应该有主键,并且每个字段要求原子性不可再分
(2)第二范式:在第一范式的基础上,所有非主键字段必须完全依赖主键,不能产生部分依赖
(3)第三范式:在第二范式的基础上,所有非主键字段必须直接依赖主键,不能产生传递依赖
设计范式的目的:减少数据冗余
16.左连接、右连接、笛卡尔积、全连接和内连接的区别
(1)左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表数据
不匹配则显示为null
(2)右连接(右外连接):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表数据
不匹配则显示为null
(3)全连接:先以左表进行左外连接,再以右表进行右外连接
(4)内连接:显示表之间有连接匹配的所有行
(5)笛卡尔积:也叫交叉连接
17.SQL约束有哪几种
(1)NOT NULL(非空约束):用于控制字段的内容一定不能为空
(2)UNIQUE(唯一性约束):控制字段内容不能重复,一个表允许有多个Unique约束
(3)PRIMARY KEY(主键约束):用于控制字段内容不能重复,但一个表只允许出现一个
(4)FOREIGN KEY(外键约束):用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,
因为它必须是它指向的那个表中的值之一
18.事务的特性
(1)原子性:事务是最小的执行单位,不允许分割。整个事务中的所有操作,要么全部完成,要么全部不完成,
不可能停滞在中间某个环节
(2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏
(3)隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的
(4)持久性:在事务完成以后,该事务对数据库中数据的改变是持久的
19.事务的隔离级别
事务的隔离级别越高,并发性就越差,性能就越低
(1)读未提交:事务A在事务B未提交前读取数据,如果事务B撤销了修改,那么A会读取到脏数据
(2)读已提交:事务A分别在事务B提交前和提交后读取数据,出现不可重复读
(3)可重复读
(4)序列化
20.索引的优缺点,什么时候使用索引,什么时候不能使用索引
(1)索引最大的好处就是提高查询速度
(2)缺点是更新数据时效率低,因为要同时更新索引
(3)对需要频繁查询的数据建立索引,对需要频繁更改的数据不建议使用索引
21.什么是数据库连接池 为什么需要数据库连接池
(1)数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
(2)数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小
数据库连接数来设定的
(3)数据库连接是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性
和健壮性,影响到程序的性能指标
22.B+树
(1)非叶子节点不存储数据,只存储索引(冗余),可以放更多的索引
(2)叶子节点包含所有索引字段
(3)叶子节点用指针连接,提高区间访问的性能
(4)所有的元素节点从左到右依次递增排序
(5)所有索引元素不重复
23.聚集索引和非聚集索引的区别
(1)聚集索引叶子节点包含了完整的数据(InnoDB采用的聚集索引)
(2)非聚集索引:索引文件和数据文件不在一起存储
24.为什么推荐使用整形自增的主键而不是用UUID
(1)查找效率高
(2)占用存储空间少
(3)尽量自增的原因:采用非自增插入的时候会效率低