简单说一下数据库三大范式
第一范式:是最基本的范式。如果数据库表中的所有字段都是不可再分的原子值,就说明该数据库满足第一范式。
第二范式:满足第一范式,而且所有非主属性都依赖于主码。
第三范式:满足第二范式,而且所有非主属性对任何候选关键字都不存在传递依赖。即每个主属性都跟主键有直接关系而不是间接关系。
你了解MySQL的架构吗
MySQL可以分为应用层、逻辑层、数据库引擎层、物理层(简记:用萝卜吸引狸子)
应用层:负责和客户端建立连接,响应客户需求,返回数据。
逻辑层:包括SQL接口,解析器,优化器,Cache与buffer。
数据库引擎层:有常见的MyISAM,InnoDB等等。
物理层:负责文件存储,日志等等。
(名词解释:SQL接口(SQL Interface),他是一套执行SQL语句的接口,专门用于执行我们发送给MySQL的那些增删改查的SQL语句。InnoDB是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。)
执行SQL语句的过程
1.客户端首先通过连接器进行身份验证和权限相关
2.如果是执行查询语句的时候,会先查询缓存(8.0版本后移除)
3.未命中缓存,SQL语句就会经过解析器,分析语句,包括语法检查等
4.通过优化器,将用户的SQL语句按照MySQL认为最优的方案执行
5.执行语句
MySQL的共享锁、排他锁
共享锁也称读锁,相互不阻塞,多个客户在同一时刻内同时读取同一个资源而不相互干扰。排他锁也成为写锁,会阻塞其他的写锁和读锁,确保在给定时间内只有一个用户能执行写入并防止其他用户读取正在写入的统一资源。
MySQL中的按粒度的锁的分类(表级、行级、Gap、Next-key Lock)
表级锁:对当前操作的整张表加锁,实现简单,加锁快,但并发能力低
行锁:锁住某一行,如果表存在索引,那么记录锁是锁在索引上的,如果表没有索引,那么InnoDB会创建一个隐藏的聚簇索引加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。
Gap锁:也成为间隙锁:锁定一个范围但不包括记录本身,其目的是为了方式同一事物的两次当前读出现幻读的情况(幻读:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 删除或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候真实的数据集已经发生了变化,但是A却查询不出来这种变化,因此产生了幻读。)
Next-key Lock:行锁+Gap锁
如何解决数据库死锁
1.预先检测到死锁的循环依赖,并立即返回一个错误
2.当查询的时间达到锁等待超时的设定或放弃锁请求
简述乐观锁和悲观锁
乐观锁:对于数据冲突保持一种乐观态度,操作数据时不会对操作的数据进行加锁,只有到数据提交的时候才通过一种机制来验证数据是否存在冲突
悲观锁:对于数据冲突保持一种悲观态度,在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作,一般数据库本身的机制都是基于悲观锁的机制实现的。
简述InnoDB引擎
InnoDB引擎是MySQL的默认事务型引擎,支持事务,表是基于聚簇索引建立的。支持表级锁和行级锁,支持外键,适合数据增删改查都频繁的情况。
InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认级别是PEPEATABLEREAD,并通过间隙锁策略防止幻读,间隙锁使InnoDB不仅仅锁定查询涉及的行,还会对索引中间的间隙进行锁定防止幻行的插入。
简述MyISAM引擎
在MySQL5.1及之前,MyISAM是默认存储引擎。MyISAM不支持事务,MyISAM支持表级锁不支持行级锁,表不支持外键,该存储引擎存有表的行数,count运算会更快。适合频繁查询,不适合对于增删改要求高的情况。
简述Memory存储引擎
Memory存储引擎将所有数据都保存在内存,不需要磁盘IO。支持哈希索引,因此查找速度极快。Memory表使用行级锁,因此并发写入的性能较低。
索引是什么
索引是存储引擎中用于快速找到记录的一种数据结构。在关系型数据库中,索引具体是一种对数据库中一列或多列的值进行排序的存储结构。
为什么引入索引
为了提高数据查询的效率。索引对数据库查询良好的性能非常关键,当表中数据量越来越大,索引对性能的影响越重要。
MySQL有哪些常见索引类型

简述B-Tree与B+树
B-tree是一种自平衡的多叉树。每个节点都存储关键字值。其左节点的关键字值小于该节点关键字值,且右子节点的关键字值大于或等于该节点关键字值。
B+树也是一种自平衡的多叉树。其基本定义与B树相同,不同于数据只出现在叶子节点,所有叶子节点增加了一个链指针,方便进行范围查询。
B+树中间节点不存放数据,所以同样大小的磁盘页上可以容纳更多节点元素,访问叶子节点上关联的数据也具有更好的缓存命中率。并且数据顺序排列并且相连,所以便于区间查找和搜索。
B树每个节点都包含key和value,查询效率比B+树高。

被折叠的 条评论
为什么被折叠?



