MySql数据库面试知识总结

本文总结了MySQL数据库面试中的核心知识点,包括数据库范式、索引类型及其优缺点、事务处理、隔离级别、存储引擎的对比、SQL语言组成部分、数据类型区别、查询优化以及数据库优化策略等,旨在帮助读者理解和掌握MySQL的重要概念和实践技巧。
摘要由CSDN通过智能技术生成

1. 数据库范式

  1. 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
    如电话列可进行拆分—家庭电话、公司电话
  2. 第二范式(2NF):首先是符合第一范式,另外包含两部分内容,一是表必须有主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分
  3. 第三范式(3NF):首先是符合第二范式,另外非主键列必须直接依赖于主键,不能存在传递依赖。
    比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)
    这样一个表结构,就存在上述关系。 学号–> 所在院校 --> (院校地址,院校电话)
    这样的表结构,我们应该拆开来,如下。
    (学号,姓名,年龄,性别,所在院校)–(所在院校,院校地址,院校电话)
  4. BC范式,
    所有非主属性对每一个码都是完全函数依赖;
    所有主属性对每一个不包含它的码也是完全函数依赖;
    没有任何属性完全函数依赖于非码的任何一组属性。
    例如:有关系模式C(Cno, Cname, Pcno),Cno, Cname, Pcno依次表示课程号、课程名、选修课。可知关系C只有一个码Cno,且没有任何属性对Cno部分函数依赖或传递函数依赖,所以关系C属于第三范式,同时Cno是C中的唯一决定因素,所以C也属于BC范式
    满足这些规范的数据库是简洁的、结构明晰的;同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常

2.数据库索引

什么是数据库索引

索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树

  • 优点:
    索引可以大大提高MySQL的检索速度
    创建索引可以大大提高系统的性能
  • 缺点:
    创建索引和维护索引要耗费时间
    索引需要占物理空间
    索引需要动态维护,降低了数据的维护速度

为什么索引要使用B+树,和hash索引比有什么优缺点

1.Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ 树是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描
2.如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题
3.哈希索引没办法利用索引完成排序

聚簇索引和覆盖索引

1.聚簇索引:
InnoDB的B+ Tree可能存储的是整行数据,也有可能是主键的值。
在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引

  • 聚簇索引的查询会更快:因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询

2.覆盖索引:
指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。
当一条查询语句符合覆盖索引条件时,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。

联合索引、最左前缀匹配

对于查询概率比较高,经常作为where条件的字段设置索引
两个或更多个列上的索引被称作复合索引
在创

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值