数据库三大范式是什么
- 第一范式:确保每个数据列都是不可再分的原子值
- 第二范式:表中的每个非主键列完全依赖于主键列
- 第三范式:每个非主键列之间不应该存在依赖关系
MySQL为什么默认引擎是InnoDB
- 支持事务
- 支持行级锁
- 支持外键
什么是索引?索引有哪些优缺点?
索引是数据库中用于提高数据检索性能的数据结构
优点:
- 提高查询性能
- 唯一性约束
MySQL 索引分类?
- 主键索引
- 唯一索引
- 普通索引
- 组合索引
什么时候不要使索引
- 小型表
- 插入更新频繁的表
- 查询条件不经常使用
- 需要频繁更新索引的表
MySQL中有那些锁
- 表级锁
- 行级锁
- 共享锁
- 排他锁
- 记录锁
- 间隙锁
- 临表锁
B树和B+树的区别
B树每个节点都包含了键和对应的值,B+树只有叶子节点存储了实际的数据记录,B+树叶子节点之间用链表连接
MySQL多表查询时有哪些连接方式
- 内连接
- 左外连接
- 右外连接
- 全外连接
- 自连接
- 交叉连接
什么是最左前缀原则?
假设有一个包含三个列(A, B, C)的复合索引 INDEX(A, B, C)
,最左前缀原则的含义是:
- 数据库可以使用列
A
进行查询优化。 - 数据库可以使用列
A
和B
进行查询优化。 - 数据库可以使用列
A
、B
和C
进行查询优化。
但是,数据库不能仅使用列 B
或列 C
,因为这不满足最左前缀原则。
什么是覆盖索引?
覆盖索引是指一个索引中包含了所有被查询字段(包括查询条件字段和查询结果字段),使得查询可以直接从索引中获得所有需要的数据,而不需要再去表中读取数据。
什么是索引下推?
索引下推(Index Condition Pushdown,ICP)是一种数据库优化技术,主要用于提高查询性能,特别是在包含复杂查询条件的场景下。ICP通过在索引扫描阶段提前过滤数据,减少不必要的回表操作,从而提高查询效率。
为什么需要数据库连接池呢?
- 提高性能
- 资源管理
- 并发处理
- 连接可靠性
并发事务带来哪些问题?
- 脏读
- 不可重复读
- 幻读
- 丢失数据
CHAR 和 VARCHAR 的区别?
- CHAR长度固定
- VARCHAR可变
慢SQL你是怎么优化的
- 优化查询语句结构
- 添加合适的索引
- 使用覆盖索引
- 避免全表扫描
- 合理分页查询
索引失效的情况有哪些
- 不满足索引列循序
- 使用函数或表达式
- 使用了NOT,<>,OR等非优化的逻辑操作符
- 数据类型不匹配
- 数据分布不均匀
说下你对数据库事务的理解
- 原子性
- 一致性
- 隔离性
- 持久性
事务的隔离级别有哪些
- 读未提交
- 读已提交
- 可重复读
- 串行化
讲讲主从复制原理与延迟
主从复制是一种常用的数据库数据同步机制,通过将主数据库的数据变更复制到从数据库来实现数据备份、负载均衡和高可用性。然而,复制延迟是主从复制中的一个常见问题,理解复制延迟的原因并采取相应的优化措施可以有效减少延迟,确保数据的一致性和系统的高效运行。
了解MySQL锁升级吗
MySQL的锁升级(Lock Escalation)指的是将大量的细粒度锁(如行锁)合并为较少的粗粒度锁(如表锁),以减少锁管理开销,提高系统性能。锁升级机制在某些数据库系统中存在,但MySQL的InnoDB存储引擎并不支持自动锁升级。相反,InnoDB设计了一些机制来有效管理和使用细粒度锁,以避免锁升级的需求。
MySQL 有哪些高可用方案
- 主从复制
- 集群
如何解决MySQL死锁问题
- 使用行级锁
- 优化查询和事务逻辑
- 调整事务隔离级别
- 设置合理的超时时间和重试机制
MySQL索引底层结构为什么使用 B+树
- 良好的平衡性
- 循序访问性
- 存储效率
- 支持高并发
- 易于扩展和维护
高并发场景下,如何安全修改同一行数据
- 乐观锁
- 悲观锁
- 分布式锁
- 事务
数据库 cpu 飙升,你会如何处理
- 查询性能问题
- 数据库连接问题
- 锁于死锁问题
- 配置问题
- 资源竞争
一条SQL的执行过程是怎样的
- 建立连接
- 查询缓存
- 分析优化
- 执行存储
- 返回结果