数据库知识点总结 最左匹配原则

1、事务

事务:事务就是满足ACID特性的一组操作。

①原子性:事务中的操作要么全部执行提交,要么全部回滚

②一致性:事务执行前后数据总额一致,不会凭空多200元也不会凭空少200

③隔离性:事务的操作在提交意见对其他事务不可见

③永久性:一旦事务提交,数据永久改变

2、事务的隔离级别

①未提交读:其他事务可以读取未提交的数据,也称为脏读

②不可重复读:两次读取结果不一样

③可重复读(MYSQL默认):当某个事务读取某个范围记录时,另一个事务在此范围里插入了一条记录会产生幻读

③串行读:强制事务串行执行

3、锁

读写锁

读锁:也称为共享锁,在同一段时间里,多用户可以同时读取统一资源

写锁:获得写锁的用户阻塞其他用户获得读锁或写锁

按锁的粒度分

  • 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。
  • 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

乐观锁与悲观锁

乐观锁:假设此次执行不会发生一致性问题,执行之后监测如果发生问题则调用处理程序

悲观锁:假设此次执行一定会发生一致性问题,必须加锁避免。

如果发生冲突的频率低应该选乐观锁,频率高则选悲观锁。

 4、聚集索引与非聚集索引

聚集索引:叶子节点记录的就是数据信息。

非聚集索引:叶子节点记录的是数据的地址。

聚集索引按照主键搜索高效,按照辅助索引搜索要搜索两遍

5、hash索引与B+树索引

B+:数据有序,适合范围查找

hash:适合等值查询,数据无序

InNoDB存储引擎会为B+树上经常访问的数据建立hash索引

6、InNoDB与MyISAM索引的区别

①InNoDB的主索引与数据文件是同一个文件,MyISAM索引与数据文件分离

②InNoDB的辅助索引叶子节点记录主键值,MyISAM索引叶子节点记录数据地址

7、索引的优缺点

索引的优点是可以提高查询速度

索引的缺点插入更新操作要重建索引

8、SQL的优化

 尽量使用索引,切分大查询,分解大联结,只返回必要的数据。

9、最左匹配原则

最左匹配原则是针对联合索引的,联合索引是多值索引,(a,b)可以理解为先对a排序,在对b排序,如果a值的条件是个范围,b则无法利用索引,a是个具体值则b能够利用索引。

 10、三范式

1NF 属性不可分

2NF 非主属性完全依赖于码

3NF 非主属性传递依赖

11、联结

①内连接也被称为等值联结 INNER JOIN

②外连接 LEFT/RIGHT OUTER JOIN 包括没有关联的行,没有记录以NULL代替

③自然联结 特殊等值联结去掉重复列

④笛卡尔积联结,没啥意义一般不用

12、关系型与非关系型数据库

关系型

二维表结构容易理解

支持SQL方便操作

支持事务付出的代价就是读写性能差

非关系型

键值对结构分布式存储

不支持SQL

读写性能好

13、主从复制

使用一个主数据库和一个从数据库,将主数据库中的操作记录到日志中,从数据库完成相同的操作,主数据库出现问题,可以利用从数据库的备份。

读写分离,主数据库进行写操作,从数据库进行读操作,减少锁的争用减轻主数据库的压力。

14、数据库连接池的作用

①资源复用,避免频繁的创建释放连接

②更快的响应速度,已经做好了初始化的准备

③统一的链接管理

15、char与varchar

char(n) :固定长度类型,比如定义char(10),当你输入"abc"三个字符的时候,它们占的空间还是 10 个字节,其他 7 个是空字节。

chatr优点:效率高;缺点:占用空间;适用场景:存储密码的 md5 值,固定长度的,使用 char 非常合适。

varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。

所以,从空间上考虑 varcahr 比较合适;从效率上考虑 char 比较合适,二者使用需要权衡。

16、InNoDB与MyISAM引擎的区别

①事务方面:InNoDB支持事务,MyISAM不支持事务

②锁机制:InNoDB行级锁,MyISAM是表级锁

③操作:MyISAM的查询操作要快(InNoDB要维护的东西多),InNoDB的插入删除操作要快

④外键:InNoDB支持外键

⑤Count(*):MyISAM直接读取保存好的行

17、死锁

(1)死锁产生的四个必要条件

互斥:进程对分配到的资源排它,及资源一段时间只能被一个进程使用

不可抢占:进程占有的资源是不可抢占的

占有并等待:一个进程至少占有一个资源,且等待一个被其他进程占有的资源

循环等待:若干资源形成相互等待的环

(2)处理死锁的方式

a预防死锁

破坏不可抢占条件:已占有不可抢占资源的进程,资源请求得不到满足,就释放已占有资源

占有并等待:一次性给够资源,要么给足,要么不给

循环等待:对资源排序,请求必须严格按照递增顺序请求

b避免死锁

检查系统是否处于不安全状态(银行家算法)

c检测死锁

用于确定系统是否发生死锁

d解除死锁

抢占资源:从其它进程中抢占足够资源,分配给死锁进程

终止进程:撤销一个或多个死锁进程,破坏循环等待链

 18、水平分表与垂直分表

水平分表:记录太多了,我们需要将一个表分成多分,用哈希取模构成新的表名。

垂直分表:表的的记录太长就按照列的关系紧密程度垂直切分。

19、多版本并发控制解决幻读

每开始一个事务版本号+1

SELECT:只查找比当前事务版本号小的数据行,或者删除标识大于当前版本号的

INSERT:新插入一条记录保存当前版本号

DELETE:为删除的每一行保存当前版本号作为删除标识

UPDATE:新插入一条记录保存当前版本号,同时保存当前版本号到原来的行作为删除标识

20、如何查询MySQL版本号

SELECT  VERSION();

21、一张表里七条数据删除最后两条

答案

INNoDB把自增主键最大值记录在内存中

MyISAM把自增主键最大值记录在数据文件中

22、怎么验证索引是否满足需求

使用 explain 查看 SQL 是如何执行查询语句的

23. mysql 问题排查都有哪些手段?

使用 explain 查看 SQL 是如何执行查询语句

开启慢查询日志,查看SQL

推荐博客

关于mysql索引的B+树、聚簇索引、非聚簇索引、InnoDB、MyISAM之间的关系解析

最左匹配原则

Java 最常见的 208 道面试题:第十七模块答案

数据库常见面试题(附答案)

猜你喜欢

转载自www.cnblogs.com/mgblogs/p/11996817.html
今日推荐