java mysql 异步框架_【JAVA】mysql数据库常见知识点

1、事务四大特性

原子性:要么执行,要么不执行

隔离性:所有的操作全部执行完以前其他会话不能看到执行过程

一致性:执行前和执行后,数据库都处于一个一致性的状态,比如数据总额是一致的

持久性:一旦事务提交,对数据的改变是永久的

2、数据库隔离等级

数据库可能出现下面的问题:丢失修改、脏读(一个进程读取了另外一个进程未提交的数据)、不可重复读(两次读取同一行,前后数据不一样)、脏读(两次检索结果,对应的结果集合不同)。脏读和不可重复读的区别在于,脏读下结果集合有发生结构性的变化,比如多了一行,少了一行;而不可重复读下的结果集合并没有发生结构性变化。

数据库的隔离等级:读未提交、读已提交、可重复读、串行化

164375c301c66e0dff05a23e2ff9040f.png

3、Mysql两种存储引擎的区别

myisam:不支持事务、表锁、不支持行锁、不支持外键

innodb:支持事务、支持行锁、支持外键

4、哈希索引和B+树索引

哈希索引在查询单值(一行)的时候效率是很高的,都是O(1),但是数据库中经常出现的操作时范围查找,排序查找,而这个时候哈希索引的时间复杂度就退化成O(n)了。而B+树索引的时间复杂度一直是O(log n),非常稳定。

5、聚簇索引和非聚簇索引

(1)聚簇索引:数据行的物理顺序和某一列的逻辑顺序是一致的。一个表上一般只有一个聚集索引。一般会在主键上创建聚集索引。如果你创建表没有指定索引的话,innodb会在主键上创建聚集索引。非聚集索引:数据行的物理顺序和某一列的逻辑顺序是不一致的。一个表上可以有多个非聚集索引。

155393110791e548ab1f1982c2ae0899.png

(2)数据库中索引是用B+树的形式来表现的,聚集索引的叶子节点上存储的是数据行;而非聚集索引的叶子节点上存储的还是索引,只不过里面包含了一个指针,指向真正的数据行。所以,非聚集索引可能会面临二次查询的问题,就是你如果查了两个列的值,一个列并不是非聚集索引,那次是就需要查第二次,去真正的数据行。所以聚集索引的查询效率一般会高于非聚集索引。

fb1d6128120b5b025b7b96e9555f55d1.png

6、索引的优缺点,什么时候使用索引,什么时候不能使用索引

加快查询速度,加快排序速度

索引也是要占空间的

索引会影响写的速度,会加快读的速度

频繁查询的列可以建索引,频繁更新的列不适合建立索引

7、索引的底层实现

线性表:查找效率是O(n)

二叉查找树:查找效率是O(log n),最坏情况下查找效率退化成O(n)

平衡二叉查找树AVL:查找下来是O(log n),平衡操作非常严格,需要耗费大量的时间在调整上

红黑树:不严格的平衡二叉查找树,查找效率是O(log n),平衡操作较AVL树有了效率上的提升

B树:红黑树最大的缺点在于它是一个二叉树,如果用在数据库中的话,会导致树的高度非常高,从而影响查找性能。而B树是一个多路分叉查找树,所有的叶子节点都在同一高度。因为分的叉多了,所以B树的高度降低,查找性能就上来了,但也是O(log n)的时间复杂度。

B+树和B树的区别:(1)首先都是多路查找树,其次叶子节点都在同一高度上; (2)B树的非叶子节点会存储索引+真实的数据;而B+树的非叶子节点不存储真实的数据,所有的真实数据都放在叶子节点上。这就导致了B树的查找性能是不稳定的,而B+树对于每一个数据值它的查找性能都是稳定的。另外因为B+树的非叶子结点只存储索引,所以读取一个节点(B+树的节点通常设计成是一个page的大小,操作系统局部性原理+磁盘预读操作,每次会读一个page大小的数据)的时候可以获得更多的索引值,也就是说B+树的IO效率是高于B树的。(3)B+树的叶子结点维护了一个双向的链表,这样就可以支持范围查找了,而且遍历这个数据可以直接遍历这个链表就可以了,不用再遍历整个树了。

8、Sql优化

有索引要走索引

对多个字段进行等值查询时,可以建立联合索引

子查询变成left join

9、数据库的主从复制

异步复制:master开启一个线程,来将binlog日志传递给slave;slave开启两个线程,一个线程接受binlog内容将其写到slave的中继日志中。另一个线程执行中继日志中的sql语句。

半同步:master把binlog的内容都写到slave的中继日志中,master才返回操作完成的反馈。

并行:slave多个线程去请求binlog日志。

10、数据库三大范式

列不可再分

主键唯一确定一行

只有主键才可以做外键

11、 MySQL的整体架构图

4de595fc5797a9de89d36f54343a5606.png

12、mysql中sql语句的执行顺序

建立连接

发送sql语句

查询缓存

sql解析器解析sql语句,生成解析树,验证是否符合语法规则

sql优化器将解析树转成执行过程,一个解析树可能对应多个执行过程,sql优化器会选择一个它认为最优的(但有时候sql优化器认为的最优并不是DBA人为的最优,所以这块还有可以人为优化的空间)。

1cf80086fb5e4e52229e2aadf6f57585.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值